XSS
XSS(Cross-Site Scripting)跨站脚本攻击,因为缩写和CSS重叠,故叫XSS。跨站脚本攻击是指通过存在安全漏洞的Web网站注册用户的浏览器内运行非法的HTML标签或者JavaScript进行的一种攻击。
存储型XSS
- 攻击者将恶意代码提交到⽬标⽹站的数据库中。
- ⽤户打开⽬标⽹站时,⽹站服务端将恶意代码从数据库取出,拼接在 HTML 中返回给浏览器。
- ⽤户浏览器接收到响应后解析执⾏,混在其中的恶意代码也被执⾏。
- 恶意代码窃取⽤户数据并发送到攻击者的⽹站,或者冒充⽤户的⾏为,调⽤⽬标⽹站接⼝执⾏攻击者指定的操作。
反射型XSS
- 攻击者构造出特殊的 URL,其中包含恶意代码。
- ⽤户打开带有恶意代码的 URL 时,⽹站服务端将恶意代码从 URL 中取出,拼接在 HTML 中返回给浏览器。
- ⽤户浏览器接收到响应后解析执⾏,混在其中的恶意代码也被执⾏。
- 恶意代码窃取⽤户数据并发送到攻击者的⽹站,或者冒充⽤户的⾏为,调⽤⽬标⽹站接⼝执⾏攻击者指定的操作。
DOM型XSS
- 攻击者构造出特殊的 URL,其中包含恶意代码。
- ⽤户打开带有恶意代码的 URL。
- ⽤户浏览器接收到响应后解析执⾏,前端 JavaScript 取出 URL 中的恶意代码并执⾏。
- 恶意代码窃取⽤户数据并发送到攻击者的⽹站,或者冒充⽤户的⾏为,调⽤⽬标⽹站接⼝执⾏攻击者指定的操作。
跨站脚本攻击有可能造成以下影响:
- 利用虚假表单输入骗取用户个人信息
- 利用脚本窃取用户的cookie值,受害者在不知情的情况下,帮助攻击者发送恶意请求
- 显示伪造的内容
- 获取页面数据
- 劫持前端逻辑
攻击防范
1,HEAD
2,CSP
CSP本质上是建立白名单,开发者明确告诉浏览器哪些外部资源可以加载和执行,我们只需要配置规则,如何拦截有浏览器自己实现。我们可以通过这种方式来尽量减少XSS攻击。
3,转义字符
对于服务器来说,用户的输入永远不可信任,最普遍的做法就是转义输入输出的内容,对于引号、尖括号、斜杠等进行转义。
但是对于富文本提交的内容来说,用上面的方法来转义所有字符,会把需要的格式也过滤掉。对于这种情况,通常采用白名单过滤的方法。当然也可以通过黑名单进行过滤,但是因为需要过滤的标签和属性实在太多,使用白名单会更加简便。
4,HttpOnly Cookie
这是预防XSS攻击窃取用户cookie最有效的防御手段。Web应用程序在设置cookie时,将其属性设置为HttpOnly,就可以避免该网页的cookie被客户端恶意JavaScript窃取,保护用户cookie信息。
CSRF
CSRF(Cross Site Request Forgery)跨站请求伪造,是一种常见的Web攻击,它利用用户已登录的身份,在用户不知情的情况下,以用户的身份名义完成非法操作(诱导用户访问恶意攻击者提供的危险站点)。
CSRF攻击造成的危害:
- 利用用户登录状态,执行非法操作
- 盗取用户资金(转账、消费)
- 冒充用户发布恶意言论。损害用户和网站声誉
攻击防范
- 禁止第三方网站带Cookie
- Referer Check - Https不发送referer
- 使用验证码
点击劫持 - clickjacking
点击劫持是一种视觉欺骗的攻击手段。攻击者将需要攻击的网站通过iframe嵌套的方式嵌入自己的网页中,并将iframe设置为透明,在页面中透出一个按钮诱导用户点击。
攻击防范
1,X-FRAME-OPTIONS
X-FRAME-OPTIONS是一个HTTP响应头,在现代浏览器有一个很好的支持,这个HTTP响应头就是为了防御用iframe嵌套的点击劫持攻击。
该响应头有三个值可选:
- DENY:页面不允许通过iframe的方式展示
- SAMEORIGIN:页面可以在相同域名下通过iframe的方式展示
- ALLOW-FROM:页面可以在指定来源的iframe中展示
2,js方式
使用js的方式,就是当通过iframe的方式加载页面时,通过js脚本让攻击者的网页直接不显示所有内容。
网络请求劫持
网络劫持一般分为两种:
- HTTP劫持:由于http明文传输,运营商会修改我们的http响应内容(加广告等)
- DNS劫持(输入网址a,却被强制跳转到b网站)
- DNS强制解析:通过修改运营商的本地DNS记录,来引导用户流量到缓存服务器
- 302跳转的方式:通过监控网络出口的流量,分析判断哪些内容是可以进行劫持处理的,再对劫持的内存发起302跳转的回复,引导用户获取内容。
攻击防范
DNS劫持由于涉嫌违法,已经被监管起来,现在很少会有DNS劫持。而HTTP劫持依然非常盛行,最有效的办法就是全站HTTPS,将HTTP加密,这使得运营商无法获取明文,就无法劫持响应内容了。
需要注意的是,这里说的是全站HTTPS,因为非全站的HTTPS并不安全。
DDOS
DDOS(distributed denial of service)不是一种攻击,而是一大类攻击的总称。它有几十种类型,新的攻击方法还在不断发明处理。网站运行的各个环节,都可以是攻击目标。只要把一个环节攻破,使得整个流程跑不起来,就达到了瘫痪服务的目的。
其中,比较常见的一种攻击是CC攻击。它就是简单粗暴地送来大量正常的请求,超出服务器的最大承受量,导致宕机。
攻击防范
1,备份网站
备份网站不一定是全功能的,如果能做到全静态浏览,就能满足需求。最低限度应该可以显示公告,告诉用户网站出了问题,正在全力抢修。
2,HTPP请求拦截