2

因此,我试图找出清理 xss 以安全输出给用户的最佳方法。

或多或少,当从表单存储值时,我使用 strip_tags(); 然后 bind_params();

当我即将向用户输出数据时,我也使用 htmlentities();

数据只会显示在内部<p><a>标签中。

例如:

<p> Some data from user </p>

<a href=""> Some data from user </p>

这应该工作吗?

索引.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>";


?>
4

2 回答 2

1

是的,您可以安全地使用此代码。我看到您已经在使用bind_param(并且我假设mysqliorPDO库),它可以防止 SQL 注入(对您造成损害),并且htmlentities,它可以防止跨站点脚本(对用户造成损害)。

您甚至不需要strip_tags在写入数据库之前调用,尽管如果您不希望用户输入包含任何 JS/PHP/HTML 标记(以及如果您忘记safe在输出时调用函数) ,这是一个好主意)。

于 2013-08-08T20:44:55.290 回答
0

向数据库插入数据时必须使用 mysql_real_escape_string 或使用 PDO,如果显示数据则必须使用 htmlspecialchars

于 2013-08-08T20:56:30.393 回答