XSS定义
XSS:(Cross Site Script)跨站脚本攻击,是一种“HTML注入”,由于攻击的脚本多数时候是跨域的,所以称之为“跨域脚本”。攻击者往Web页面里插入恶意html、javascript、style代码,破坏页面结构,盗用cookie。
XSS攻击方式
反射型:发出请求时,XSS代码出现在URL中,作为输入提交到服务器端,服务器端解析后响应,XSS代码随响应内容一起传回给浏览器,最后浏览器解析执行XSS代码。
存储型:存储型和反射型的区别在于提交的攻击代码会存储在服务器端,下次请求目标页面时不用再提交xss攻击代码
XSS原理
xss攻击条件
1. 需要向页面注入恶意代码;
2. 恶意代码能够在浏览器被成功执行;
示例
1. 使用express.js构建Node应用,展示反射型XSS攻击
```
$ npm install express-generator -g
$ express xss
$ cd xss
$ npm install
$ npm run start
# 访问 http://localhost:3000/
```
构建成的项目文件:
1. 在router文件夹下的index.js文件中,添加一个接收的xss参数。
2. 在views文件夹下的index.jade文件中,将输入的xss攻击代码注入到页面中去。
3. 运行```npm run start```,打开控制台发现浏览器拦截了xss攻击(见最后相关内容链接)
关闭浏览器拦截xss攻击
4. 再次运行```npm run start```,在地址栏输入:```http://localhost:3000/?xss=<img src="null" onerror="alert('xss攻击代码')">```
分析:
当攻击者通过url的参数注入xss攻击代码,页面解析并执行了代码,或破坏代码结构或获取用户的一些信息。注入html代码,像Dom上的onclick,onchange,onerror事件可执行js代码。<iframe>标签在页面中插入第三方页面,在页面中植入广告。注入style样式代码,通过样式来改变页面展示,例如将body {display: none !important}代码注入到页面。script代码更为严重。
XSS防御措施
示例:
模拟评论功能,在输入框中输入评论功能,并在页面上展示输入的内容。
在上面的图中看到,在输入框中输入了带有攻击性的代码段'<p> xss攻击模拟 <img src='null' onerror='alert(1)'></p>',通过下面控制台可看出,当获取评论的时候,在下面展示的是文字,和<img>标签。在<img>标签中的属性没了,可延伸当在页面渲染这段代码时,攻击性内容过滤掉,避免了攻击。
1. 编码
对用户输入的数据进行HTML Entity编码,例如: '<'字符用'<'的形式显示出来
2. 过滤
移出用户上传的Dom属性,如onerror
移出用户上传的style节点,script节点,iframe节点等
3. 矫正
避免直接对HTML Entity解码
使用Dom Parse转换,矫正不配对的Dom标签
相关内容
0. XSS攻击及防御Demo地址:
https://link.segmentfault.com/?enc=Lb66%2Fo217uyLCdfCMbGbHw%3D%3D.hhBOVED6nJc1dw2oECKBhn7xX%2Bp9nI5myUbiqxhuh82gajy2MOblSKq4TuiBTFZIRxGV4hdrn%2BSL8LdOY6YwiFUF1aszI%2FPqcDe3ivSxhOyxJDdFEqW35bW4v7aJDaUNN8fyP%2FGV0u8aODdHDTK67Q%3D%3D
-
jade:一个高性能的模板引擎,可参考文档https://segmentfault.com/a/11...
https://segmentfault.com/a/1190000000357534
2. X-XSS-Protection:文档
https://link.segmentfault.com/?enc=J16mgKQLUcITyHXQJEvQnA%3D%3D.VkJwbecRlMqsMM4aQy0O6DrYWLaErLXGYea8mIVc%2BJKA6iFjVeOW0%2BAyXmnLquYHfDf09xqxuBYDpJFz8SO3fdOwATbXaV2lecUF1iEBK9Q%3D
3. HTML Entity编码表:
https://link.segmentfault.com/?enc=RCa87n9xjstM6Pm0KIfRCw%3D%3D.D6flqW1GwoRcrJWWBS2tzBOVKi6DHoc7ABHFf5tOghhyCNRq6Cu5fnc8CdWnE85mRAGTe5IJuizJ%2FhW3w264Og%3D%3D
4. 用到HTML解析的两个库:
https://link.segmentfault.com/?enc=Qusp6axpB49K1qUemVdNMQ%3D%3D.ZZih1zaulmRDinrV4pGHBi3sMDMIIIlk0t9QylAt9ygrMuL2y80WBIaVNGFB1IrR
https://link.segmentfault.com/?enc=9ZLEAufRQKCe0TBWOTfNmw%3D%3D.82%2ByjpJyzn8EbmJ7G%2FBjWU49QIsIGHX6qcfQ45mgwzUe3zCqIfIOT5BjDM1GX0JQLxygKON500gBQUO0V9zE0Ny4xKXID7TtGx1TD1mLf%2FVDebNo6IIVbtncHLv7Tzik
声明:本公众号所分享内容仅用于网安爱好者之间的技术讨论,禁止用于违法途径,所有渗透都需获取授权!否则需自行承担,本公众号及原作者不承担相应的后果.
原文始发于微信公众号(橘猫学安全):Web安全之XSS攻击及防御
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论