一、什么是 XSS 攻击?
XSS 全称是 Cross Site Scripting (即跨站脚本),为了和 CSS 区分,故叫它XSS 。
- 场景:目标网站的目标用户
- 执行:由浏览器解释执行
- 不被预期的的代码
发生在目标网站的目标浏览器,当用户渲染整个HTML文档的过程中出现了不被预期的脚本指令并执行时,XSS就发生了。
二、XSS类型
-
反射型XSS(非持久型XSS)
XSS代码出现在URL中,作为输入调教到服务器,服务器解析后响应,在响应内容中返回到浏览器中执行。
场景:
XSS代码如下:<?php echo $_GET['x'];?>提交如下代码
http://www.foo.com/xss/reflect1.php?x=<script>alert('你完蛋了!'))</script>服务器解析时,echo就会完整第输出到响应体中,然后浏览器解析触发。
-
存储型XSS(持久型XSS)
提交的XSS代码会存储在服务器中,下次请求目标页面时不用再提交XSS代码
场景:常见的场景是留言评论区提交一段脚本代码,如果前后端没有做好转义的工作,那评论内容存到了数据
库,在页面渲染过程中直接执行, 相当于执行一段未知逻辑的 JS 代码,是非常恐怖的。这就是存储型的
XSS 攻击。 -
DOM XSS
DOM XSS的XSS代码不需要服务器解析响应,出发XSS靠浏览器的DOM解析,可以认为完全是客户端的事情。
**场景:**WIFI路由器劫持或者本地恶意软件,盗取Cookie
例:<script> eval(location.hash.substr(1))); // 输出URL中第一个hash值</script>如
www.test.com/index.html#alert(document.cookie);cookie就被盗取了,当然这种方法太明显了,alert(document.cookie)部分应该为一段脚本,将cookie上传到黑客的浏览器。
三、危害
- 窃取Cookie
- 监听用户行为,比如输入账号密码后直接发送到黑客服务器
- 修改 DOM 伪造登录表单
- 在页面中生成浮窗广告
- 删除目标文件、恶意篡改数据
四、防范措施
明白了三种XSS攻击的原理,我们能发现一个共同点: 都是让恶意脚本直接能在浏览器中执行。那么要防范它,就是要避免这些脚本代码的执行。
为了完成这一点,必须做到一个信念,两个利用。
- 千万不要相信任何用户的输入!
无论是在前端和服务端,都要对用户的输入进行转码或者过滤。- 输入校验:长度、值类型、是否有特殊符号(<>)
- 输出编码
- 利用 CSP
CSP,即浏览器中的内容安全策略,它的核心思想就是服务器决定浏览器加载哪些资源,具体来说可以
完成以下功能:- 限制其他域下的资源加载。
- 禁止向其它域提交数据。
- 提供上报机制,能帮助我们及时发现 XSS 攻击。
- 利用 HttpOnly
很多 XSS 攻击脚本都是用来窃取Cookie, 而设置 Cookie 的 HttpOnly 属性后,JavaScript 便无法读取
Cookie 的值。这样也能很好的防范 XSS 攻击。
OWASP提供了不错的XSS防御方案
五、总结
XSS 攻击是指浏览器中执行恶意脚本, 然后拿到用户的信息进行操作。主要分为存储型、反射型和DOM型。防范的措施包括:
一个信念: 不要相信用户的输入,对输入内容转码或者过滤,让其不可执行。
两个利用: 利用 CSP,利用 Cookie 的 HttpOnly 属性。
参考文献:
《Web前端黑客技术揭秘》
491

被折叠的 条评论
为什么被折叠?



