php - 什么时候使用哪种字符串转义方法?

标签 php security

<分区>

好的,所以有所有这些不同的字符串转义函数,例如 htmlentities()mysql_real_escape_string()addslashes()

但是我应该在什么情况下使用哪个呢?
请提供资源和意见:)

最佳答案

  • addslashes()/stripslashes() 可以追溯到一个相当糟糕的想法,称为“魔术引号”,此想法已被弃用。它会自动转义特殊字符,然后您可以使用 addslashes() 和 stripslashes() 添加或删除它们。问题之一是您永远无法确定数据当前是否有斜线,因此您最终将未转义的数据放入 SQL 中,或者您的网页上有额外的斜线。
  • htmlentities() 通常用于在页面上显示 HTML。如果你尝试写 <b>Something</b>对于 HTML 页面,您只会看到 Something(即粗体的原始文本)——您不会看到它周围的粗体标记。使用 htmlentities('<b>Something</b>')将代码转换为 Something,因此在浏览器中您会看到三角括号。
  • mysql_real_escape_string() 可用于防御 MySQL 注入(inject)攻击 - 它转义字符串中的不安全字符。它不会转义其他数据类型的任何内容,因此需要单独处理。它也不对在某些查询中用作通配符的 % 和 _ 进行编码。

总结:

  • 如果您要编码以写入 HTML 页面,请使用 htmlentities()
  • 如果您要对字符串进行编码以写入数据库,请使用 mymysql_real_escape_string()
  • 永远不要使用 addslashes()

关于php - 什么时候使用哪种字符串转义方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5770912/

相关文章:

php - 使用 jQuery 将弹出窗口 uploader 转换为内联脚本?

php - PDO:执行数据库更新时 Json 不呈现响应

windows - 如何检查用户是域用户还是本地用户?

java - 除了购买证书,Java 开发人员还有哪些选择?

javascript - 在 Angular 7 中嵌入 iframe 是否有安全的方法?

php - Swift:无法从 PHP 正确获取数据

c# - 在 asp.net + jquery 中实现自动注销 + 警告?

php - XAMPP - SSL 证书。损坏的 HTTPS

objective-c - 从 OS X 授权插件访问钥匙串(keychain)项目时出错

c - 如何通过 TLS 测试 POODLE?