天天看點

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後,還有很多情況沒考慮到,歡迎大家多提意見,謝謝。