我正在尝试清理要保存在数据库中的字符串。我采取的第一步是使用addslashes(),但后来我意识到它并没有解决很多安全问题,所以我添加了htmlspecialchars(),现在我有了这行代码:
$val=htmlspecialchars(addslashes(trim($val)));但是,我想知道在将由htmlspecialchars()处理的字符串上使用addslashes()是否有任何意义,因为如果我没有记错的话,后者将“移除”任何会导致问题的元素。
特别是,我想知道这是否会使服务器在没有任何实际需求的情况下工作两次。
发布于 2012-11-01 20:41:57
在将字符串保存到数据库时,我不会使用它们中的任何一个。
addslashes()只转义引号字符和反斜杠字符()。它不足以避免SQL注入,因为DBMS可能会使用其他必须转义的特殊字符。避免SQL注入的最好方法是使用PHP data objects及其对绑定参数的支持,这使您可以将参数值完全排除在SQL字符串之外。如果由于某些原因PDO不是一个选项,你至少应该使用一个特定于数据库的转义函数,例如mysqli_real_escape_string,如果你使用的是MySQL,以确保所有必要的字符都是escaped.htmlspecialchars(),当把非超文本标记语言的字符串合并到超文本标记语言页面中时使用;它转义对网络浏览器有重要意义的字符,如尖括号,与数据库无关。假设您没有在数据库中生成和存储完整的HTML文档,那么在将值放入数据库之前,不应该对这些值调用此函数。存储用户实际输入的内容,并在从数据库中检索值并将其实际放入一些HTML输出时调用htmlspecialchars()。发布于 2012-11-01 20:39:10
你全部都错了。addslashes()不是数据库转义函数,请使用数据库访问扩展插件附带的函数,如mysqli_real_escape_string()。
htmlspecialchars() completey在这里没有意义。只有当你想在HTML中放置一个字符串时才使用它-那应该是在你输出东西的时候,而不是在数据库中存储它的时候。
https://stackoverflow.com/questions/13177176
复制相似问题