显示用户输入但阻止xss

时间:2014-02-24 12:31:24

标签: php html 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.'">';

4 个答案:

答案 0 :(得分:0)

使用 htmlspecialchars_decode

http://php.net/manual/en/function.htmlspecialchars-decode.php请参阅手册以获取使用信息。

答案 1 :(得分:0)

你应该使用

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

htmlentities将被转换,您可以在页面的页面源中查看它,但对最终用户来说它将显示为干净

答案 2 :(得分:0)

看看这个库我觉得它对你来说更强大

OWASP antiXSS特定库位于:http://code.google.com/p/php-antixss/

答案 3 :(得分:0)

我的代码上似乎还有另一个我没注意到的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.'">';