0

我正在尝试清理要保存在数据库中的字符串。我采取的第一步是使用addslashes(),但后来我意识到它并没有解决很多安全问题,所以我添加了htmlspecialchars(),现在我有了这行代码:

$val=htmlspecialchars(addslashes(trim($val)));

addslashes()但是后来我想知道在将由 处理的字符串上使用是否有任何意义htmlspecialchars(),因为如果我没记错的话,后者将“删除”任何会导致问题的元素。

特别是,我想知道这是否会使服务器在没有任何实际需要的情况下工作两次。

4

2 回答 2

9

你完全错了。addslashes()是没有数据库转义功能的,使用你的数据库访问扩展自带的,比如mysqli_real_escape_string().

htmlspecialchars()完整在这里没有意义。仅当您想在 HTML 中放置字符串时才使用它 - 这应该是在您输出内容时,而不是在将其存储在数据库中时。

于 2012-11-01T12:39:09.813 回答
1

将字符串保存到数据库时,我不会使用其中任何一个。

  • addslashes()仅转义引号字符和反斜杠字符 (\)。这不足以避免 SQL 注入,因为 DBMS 可能会使用其他必须转义的特殊字符。避免 SQL 注入的最佳方法是使用PHP 数据对象及其对绑定参数的支持,这样您就可以将参数值完全排除在 SQL 字符串之外。如果由于某种原因不能选择 PDO,您至少应该使用特定于数据库的转义功能,例如,mysqli_real_escape_string如果您使用的是 MySQL,以确保所有必要的字符都被转义。
  • htmlspecialchars()用于将非 HTML 字符串合并到 HTML 页面中;它转义对 Web 浏览器很重要的字符,例如尖括号,并且与数据库无关。假设您没有在数据库中生成和存储完整的 HTML 文档,则不应在将值放入数据库之前调用此函数。存储用户实际输入的内容,并在您htmlspecialchars()数据库中检索值并将其实际放入某些 HTML 输出时调用。
于 2012-11-01T12:41:57.100 回答