33 | 跨站脚本攻击(XSS):为什么Cookie中有HttpOnly属性?
同源策略可以隔离各个站点之间DOM交互, 页面数据和网络通信,安全和自由之间又找到了一个平衡点 ,默认页面可以引入任意第三方资源 ,然后又引入CSP策略加以限制,默认XMLHttpRequest和Fetch不能跨域请求资源,后面又加入了CORS策略来支持跨域
- 跨站脚本攻击, 往HTML文件或DOM注入恶意脚本,在用户浏览页面时利用注入的恶意脚本对用户实施攻击的一种手段
- 恶意脚本操作
- 获取Cookie信息,直接通过document.cookie获取Cookie信息,通过ajax或者Fetch加上CORS功能将数据发送到恶意服务器,拿到用户Cookie信息之后,在其他电脑上模拟用户登录,然后进行转账工作
- 监听用户行为,使用addEventListener监听用户的输入事件,获取用户输入信息,将其发送到恶意服务器(盗号,一般是恶意伪造页面)
- 修改DOM伪造加的登录窗口,欺骗用户输入用户名和密码等信息
- 页面生成浮窗广告
储存型XSS攻击,反射型XSS攻击,基于DOM的XSS攻击
-
储存型
- 利用站点漏洞将恶意JS代码提交到网站数据库中
- 用户向网站请求包含恶意JS的页面
- 恶意JS在用户执行,然后可以获取Cookie等数据信息
-
反射型
- 恶意JS属于用户发送给网站请求的一部分,随后网站又把恶意JS返回给用户,恶意JS在用户页面被执行时,黑客可以利用该脚本做一些恶意操作
- 恶意代码提交到Web服务器中,服务器接收到请求时,又将恶意代码反射给浏览器端,这就是XSS攻击,恶意脚本不会被储存但是会将操作反射给浏览器执行
-
基于DOM XSS攻击
- 通过将恶意脚本注入页面(网络劫持页面然后修改HTML页面内容,WIFI劫持,本地恶意软件劫持等等)都是在Web资源传输的过程中或者在用户使用页面的过程中修改Web页面数据
-
永远不要相信用户输入的行为
- 服务器对输入脚本进行过滤或者转码,一些关键字符& < > : ()等等都需要进行转义,同时也可以选择将
<script>
标签内的所有东西全部过滤掉
- 服务器对输入脚本进行过滤或者转码,一些关键字符& < > : ()等等都需要进行转义,同时也可以选择将
-
充分利用CSP
-
CSP:
-
限制其他域下的资源文件, 即使黑客插入JS,但是JS也无法被加载
-
禁止向第三方域提交数据,用户数据不会被外协
-
禁止执行内联脚本和未授权的脚本
-
上报机制,帮助发现XSS攻击,以尽快修复
-
-
-
使用HttpOnly属性
- XSS攻击大多数是盗用Cookie的,使用HttpOnly保护Cookie安全,服务器可以将某些Cookie设置为HttpOnly标志,其是服务器通过HTTP响应头设置的,使用HttpOnly标识的Cookie只能使用在HTTP请求过程中,无法通过JS读取(document.cookie)
- XSS攻击就是黑客往页面注入恶意脚本,将页面比较重要的数据上传到恶意服务器(Cookie为例),常见XSS攻击是存储型XSS攻击,反射型XSS攻击和基于DOM的XSS攻击
- 攻击的特点就是往用户页面注入恶意脚本,然后通过恶意脚本将用户数据上传到恶意服务器上,有些是通过服务器漏洞注入的,有些是通过客户端(浏览器)注入的
- 针对XSS攻击有三种防范策略,第一是服务端将用户上传过来需要存储的数据进行转义或者过滤,使上传的数据无法返回浏览器执行JS恶意代码,第二是利用CSP策略,第三就是将重要的Cookie设置成HttpOnly进行保护
- 除了以上策略,还可以添加验证码防止脚本冒充用户提交危险操作, 一些不信任的操作还可以限制长度