XSS-Filter: 基于黑白名单的安全过滤策略,实际上是一段过滤函数
绕过:
(1)利用< >标记注射Html和Javascript
通过引入< >操作HTML标签,然后利用标签任意插入由JavaScript编写的恶意脚本代码。
(2)利用HTML标签属性值执行XSS
很多HTML标记中的属性都支持javascript:[code]伪协议形式,声明URL的主体是JavaScript代码,由JavaScript的解释器运行,但不是所有Web浏览器都支持JavaScript伪协议,也不是所有脚本都是JavaScript,还可以是Vbscript
(3)空格、回车和TAB
利用空格、回车和TAB拆分关键字绕过限制
在JavaScript中,如果到换行处不是一个完整的语句,那么换行符不会被解释为语句终止
(4)对标签属性值转码
因为HTML中属性值本身支持ASCII码形式,因此可以将
<img src="javascript:alert('XSS');">
替换为
<img src="javascript:alert(/XSS/);" >
还可以把空格、回车、换行和TAB以ASCLL码形式插入,或者把、等字符插入到JavaScript的头部,如:
<img src="javascript:alert(/a/)">
(5)产生自己的事件
JavaScript与HTML之间的交互通过事件实现,事件是用户或浏览器自身执行的某种动作,响应事件的函数叫事件处理函数(或事件侦听器)
<img src="#" onerror=alert(/xss/)>
onerror是img标记的一个事件,只要页面中发生错误,就立即被激活,而在上面的代码中,浏览器会试图解析src中引用的图片地址,而该图片不存在,所以onerror被触发
(6)利用CSS跨站剖析
可以使用CSS执行JavaScript代码,CSS样式表不需要嵌入到HTML代码中,而是可以从其他文件甚至是从不同的目标机器上进行引用
(7)扰乱过滤规则
可以利用大小写转换或者混合使用、使用/代替空格、插入/**/注释来干扰绕过关键字,以及将CSS关键字转码等形式扰乱过滤
(8)缩短字节
面对产生XSS处的变量长度限制,一方面可以利用事件缩短所需字节,另一方面也可以将XSS Payload写在"location.hash"中,而根据HTTP协议,"location.hash"的内容不会在HTTP包中发送
(9)使用base标签
base标签可以指定其后的标签取得的地址,从而通过在远程服务器上伪造图片、链接或脚本,劫持当前页面中的所有使用“相对路径”的标签