因此,我试图找出清理xss以便安全输出给用户的最佳方法。
或多或少,当从表单存储值时,我使用strip_tags();然后bind_params();
当Im即将输出数据给用户时我也使用htmlentities();
数据只会显示在<p>
和<a>
标记内。
例如:
<p> Some data from user </p>
<a href=""> Some data from user </p>
这应该有用吗?
的index.php
<form action="sante.php" method="post">
Name: <input type="text" name="fname">
Age: <input type="text" name="age">
<input type="submit">
</form>
然后是sante.php
<?php
$name = $_POST["fname"];
$age = $_POST["age"];
$namn = strip_tags($name); // then storing into mysql with bind_param
$older = strip_tags($age); // then storing into mysql with bind_param
// before output, htmlentities
function safe( $value ) {
htmlentities( $value, ENT_QUOTES, 'utf-8' );
return $value;
}
// Now showing values
echo safe($namn). "<br>";
echo "<p>" .safe($older) . "</p>";
?>
答案 0 :(得分:1)
是的,您可以安全地使用此代码。我看到你已经在使用bind_param
(我假设mysqli
或PDO
库),这会阻止SQL注入(对你造成伤害)和htmlentities
,防止跨站点脚本(对用户造成损害)。
在写入数据库之前,您甚至不需要调用strip_tags
,但如果您不希望用户输入包含任何JS / PHP / HTML标记,那么这也是一个好主意(如果你忘了在输出上调用你的safe
函数。
答案 1 :(得分:0)
将数据插入数据库时,必须使用mysql_real_escape_string或使用PDO, 如果显示数据,则必须使用htmlspecialchars