首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >htmlspecialchars + addslashes,有什么意义吗?

htmlspecialchars + addslashes,有什么意义吗?
EN

Stack Overflow用户
提问于 2012-11-01 20:34:02
回答 2查看 6.8K关注 0票数 0

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

代码语言:javascript
复制
$val=htmlspecialchars(addslashes(trim($val)));

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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()
票数 1
EN

Stack Overflow用户

发布于 2012-11-01 20:39:10

你全部都错了。addslashes()不是数据库转义函数,请使用数据库访问扩展插件附带的函数,如mysqli_real_escape_string()

htmlspecialchars() completey在这里没有意义。只有当你想在HTML中放置一个字符串时才使用它-那应该是在你输出东西的时候,而不是在数据库中存储它的时候。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13177176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档