2017-04-30于青岛第一海水浴场
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://github.com/liuchunhui...
1. jade:一个高性能的模板引擎,可参考文档https://segmentfault.com/a/11...
2. X-XSS-Protection:文档https://developer.mozilla.org...
3. HTML Entity编码表:http://www.cnblogs.com/mingmi...
4. 用到HTML解析的两个库:
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。