浏览器XSS自动屏蔽

最近忽然想到对旧网站程序增加xss过滤功能,于是搜索些资料,(XSS示例),写了个大致的过滤函数。

然后,很无聊自己做起了测试:

页面程序输出所有接收到的参数,类似下面这样

t.asp

For Each iKey In Request.QueryString
	Response.Write iKey
	Response.Write vbTab
	Response.Write Request.QueryString(iKey).Item()
Next

用Chrome打开t.asp?a=<script>alert('a')</script>后

发现没有动静,难道是输入错字符了?看了下提示,有个脚本错误

 

x Refused to execute a JavaScript script. Source code of script found within request.

看这意思,是发现了请求中有脚本,自动屏蔽执行了。

再看下IE9

结果类似。

然后,我又在t.asp后面加了一行

<script>alert('加载完毕')</script>

Chrome执行结果,一个报错,一个弹窗,看来检测比较准确

ie9仍旧只是一个提示,下面的代码并没有执行

脚本内容改成与地址栏一样的时候,Chrome也不能执行了。

所以,初步判断,浏览器是检测请求的字符串中脚本是否包含在页面内部,有包含,则禁用掉脚本。

Chrome则只禁用与请求中相同的脚本。

有时间测下其它浏览器对这个问题的反应。特别是IE6及某些安全浏览器。