2014-02-24 44 views
-1

我想要做一個註冊頁面,用戶輸入數據到輸入,如果這不符合我的標準我想把他的價值再次在他的輸入框,所以他沒有再寫一遍。顯示什麼用戶輸入,但防止xss

我使用htmlspecialchars來防止xss。

$string_from_user = htmlspecialchars($_POST['string'], ENT_QUOTES, 'UTF-8'); 


echo '<input type="text" name="string" value="'.$string_from_user.'">'; 

問題是...比方說,我想進入名:john"> 我的輸入框中現在將顯示:john&#34;>和輸入的真正價值在於:john&amp;#34;&gt;

如何使顯示我輸入框顯示:john">但真正的價值是一個安全的字符串,以防止XSS

解決

似乎在我的代碼上還有另一個FILTER_SANITIZE_STRING,我沒有注意到。 我刪除了,現在一切正常。

/* this caused by problems. 
$string = filter_input(INPUT_POST, 'string', FILTER_SANITIZE_STRING); 
*/ 

$string_from_user = htmlspecialchars($string, ENT_QUOTES, 'UTF-8'); 

echo '<input type="text" name="string" value="'.$string_from_user.'">'; 
+0

嘗試* *剛剛更換'「'和''"。 – h2ooooooo

+0

你有沒有嘗試過'和addslashes()',而不是'htmlspecialchars'?這樣,希望這將是正確的,在輸入框中顯示。 – iCore

+0

看看在HTML淨化器:http://htmlpurifier.org/ –

回答

0

您應該使用

$name=htmlentities($name); 
echo $name; 

ヶ輛將被轉換,你可以在頁面的pagesource查看,但對最終用戶會出現乾淨

0

似乎還有一個FILTER_SA NITIZE_STRING在我沒有注意到的代碼上。 我刪除了,現在一切正常。

/* this caused by problems. 
$string = filter_input(INPUT_POST, 'string', FILTER_SANITIZE_STRING); 
*/ 

$string_from_user = htmlspecialchars($string, ENT_QUOTES, 'UTF-8'); 

echo '<input type="text" name="string" value="'.$string_from_user.'">';