xss构造技巧续
*一、<base>
标签*
<base>
标签,其作用是定义页面上所有使用的相对路径标签的hosting地址
<base>
标签可以出现在页面的任何地方,并作用位于该标签之后的所有标签
攻击者若在页面中插入该标签,通过在远程服务器上伪造图片、链接或脚本,就可以劫持当前页面中所有使用”相对路径”的标签
二、window.name
- 对当前窗口的window.name对象赋值,没有特殊字符的限制。
因为window对象是浏览器的窗体,而不是document对象,所以window对象不受同源策略的限制
三、Anehta的回旋镖
- 反射型的xss嵌入一存储型的xss中来利用,就是回旋镖
第三方cookie是指保存在本地的cookie,即服务器设置了expire时间的cookie
四、flash xss
- Flash中是可以嵌入actionscript脚本的,所以在实现xss过滤时,一般禁用
<embed> <object>
等标签 - 若网站一定使用flash的话,如果仅仅是视频文件,则要求转码为“flv”文件,因为它是静态文件,不会产生安全隐患。
- 限制flash动态脚本最重要的参数是“allowscriptaccess”,还有”allownetworking”
五、xss的防御
1. httponly,其解决的是xss后的cookie劫持攻击。在setcookie时植入httponly。
cookie的使用过程
a,浏览器向服务器发起请求,这时无cookie
b,服务器返回时发送set-cookie头,向客户端写入cookie
c,在该cookie到期前,浏览器访问该域下的所有页面,都将发送该cookie。
2.输入检查输出检查
3.安全编码函数
对于html代码,使用htmlencode编码方式
对于php代码,使用htmlentity()和htmlspecialchars()两个函数满足安全要求
对于javascript,使用javascriptencode编码
如果网站使用了MVC架构(是模型(model)-视图(view)-控制器(controller)的缩写),那么xss发生在view层
- 在css,style标签中输出的话,使用encodeForCSS()函数
- 在地址中输出使用URLEncode编码
富文本:网站允许用户提交一些自定义的HTML代码,称之为富文本。如在论坛发帖等
处理富文本要考虑输入检查的思路上来, 过滤富文本时“事件”应被严格禁止,一些危险标签如iframe script base form等应使用白名单避免使用黑名单过滤