天天看点

XSS过滤函数修正版 PHP

前面这个帖子 http://blog.csdn.net/kaosini/article/details/7646363已经介绍了XSS防御的两种方法,但是凡事还是应该以事实为依据,于是我测试了里面提到的两个方法

1.function RemoveXSS($val)

2.function filter_xss($string, $allowedtags = '')

$testXssString="<span>aaa</span><img SRC=\"javascr
ipt:alert('a');\" />";//aaa<img STYLE=\"background-image: url(javascript:alert('XSS'))\">
echo RemoveXss($testXssString);
//$testXssString=strip_tags($testXssString,"<span><img>");
//echo 'strip_tags:'.$testXssString;
echo filter_xss($testXssString,"<img>");
           

试验结果是两个方法都不行,实验结果为:

<span>aaa</span><img SRC="javascr&#x0d;ipt:alert('a');" /><br />aaa<img SRC="javascr&#x0d;ipt:alert('a');" />

所以这两个方法有问题,之前引用的帖子说第二种方法靠谱,推荐,但我认为第一种方法比较好,代码也比较清晰,跟踪了代码,发现是他的正则写的少考虑了&#x0d;,把它加进去就能过滤了。

个人认为我修正bug后,还有很多情况没考虑到,欢迎大家多提意见,谢谢。