2014-10-03 22 views
0

傳遞我有這樣的代碼作爲抗HTML和SQL注入的在線遊戲,但它不工作,使我有以下錯誤:STR-取代致命錯誤:只有變量可以通過參考

​​

這裏是我的代碼:

$_POST = str_replace('<', '>', '\'', '\'', '\\', '&lt;', '&gt;', '&quot;', '&#39; ', '&#92;', $_POST); 
    $_GET = str_replace('<', '>', '\'', '\'', '\\', '&lt;', '&gt;', '&quot;', '&#39;', '&#92;', $_GET); 

這是第一個兩行,但我敢肯定,這個問題將是第二個了。我不擅長PHP,這些都是我從網上取得的文件。 我該如何解決這個問題?

回答

1

你不需要實現自己的XSS過濾器,由於已有現有one

你可以用這種方式利用這一優勢:

$_POST = filter($_POST); 
$_GET = filter($_GET); 

function filter(array $value) { 
     return is_array($value) ? array_map(__FUNCTION__, $value) : htmlentities($value); 

} 

這將過濾嵌套數組作爲以及(如果你的輸入很喜歡name[]

+0

它的工作原理,謝謝! – Joyfabio 2014-10-03 17:21:28

0

也許是這樣的:

$post_vars = array(); 

for ($i=0; i<count($_POST); $i++) 
{ 
    $post_vars[$i] = str_replace('<', '>', '\'', '\'', '\\', '&lt;', '&gt;', '&quot;', '&#39; ', '&#92;', $_POST[$i]); 
} 

同樣適用於$ _GET數組。

+0

這將錯誤... – 2014-10-03 17:04:20

+0

是的,這不是防止XSS的好解決方案。這可以通過將輸入命名爲數組來輕鬆入侵,例如''。而且這不是一個完整的字母表 – Yang 2014-10-03 17:11:14

相關問題