0x00:简介
最近在整理 TOP10 的审计点,上篇文章介绍了 A3XSS 问题,这里的 TOP10 是以 2013 的来记录的,对于 XSS 因为篇幅原因上篇只记录了一些示例代码,这篇顺便补充一下 XSS 的绕过和防御。
0x01:绕过
XSS 绕过方法很多,涉及到的面也非常广泛,我们这里只记录常见的一些绕过方式。
1,最基本的就是利用 <> 来写入 html 和 js 代码,例如以下示例。
<script>alert(1);</script>
所以对于防 xss 首先就需要过滤和转义 <、>、<script>等字符。
2,利用 html 标签属性值来执行 xss,很多 html 标签的属性都支持 javascript:[code] 伪协议的形式,其声明了用 js 来执行 code 代码,例如以下示例。
<table background="javascript:alert(1)"></table>
<img src="javascript:alert(1);">
当然并不是所有的浏览器都会这样执行,有些浏览器并不支持 js 伪协议,所以这种方式有其局限性,我们示例就使用这种伪协议了,当然 script、on 等关键字都同样适用,同时我们也可以看见,防御 xss 一定要过滤 js 的关键字。
3,空格回车 Tab 方式,如果程序把敏感字符和关键字进行了过滤,那么我们可以利用空格、回车、Tab 等来尝试绕过,例如以下示例。
<img src="javas cript:alert(1)">
<img src="javas__ cript:__ alert(1)">
以上第一个在 javascript 中插入了 tab 键,第二个使用了回车,除了 tab 我们也可以使用回车空格等,在 script 和各种 on 事件中也可以使用,js 解析时会以分号来判断一个语句是否结束,所以添加空格、回车、tab 等并不会影响语句的正常执行。
4,对标签属性值进行转码,在 html 的属性中是支持 ASCII 码的,因为计算机只能接受数字信息,所以 ASCII 码会将字符作为数字来表示,例如以下示例。
<img src="javascript:alert(1);">
<img src="javascript:alert(1);">
t 的 ascii 码为 116,:的 ascii 码为 58,以上是转码后的效果,同理,以下代码同样会生效。
<img src=""javascript:alert(1);"/">
<img src=""jav&#