何时使用哪种字符串转义方法?

Jos*_*waa 4 php security

好了,还有所有这些不同的字符串转义功能,例如htmlentities(),mysql_real_escape_string(),addslashes()

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

Dan*_*ows 9

  • addslashes()/ stripslashes()又回到了一个名为'Magic Quotes'的不太好的想法,后来被弃用了.它会自动转义特殊字符,然后您可以使用addslashes()和stripslashes()来添加或删除它们.其中一个问题是你从来没有确定数据当前是否有斜杠,因此你最终将非转义数据放入SQL,或者在你的网页上有额外的斜杠.
  • htmlentities()经常用于在页面上显示HTML.如果您尝试写入<b>Something</b>HTML页面,您将看到Something(即原始文本以粗体显示) - 您将看不到它周围的粗体标签.使用htmlentities('<b>Something</b>')将代码转换为<b> Something <b>,以便在浏览器中看到三角括号.
  • mysql_real_escape_string()对于防御MySQL注入攻击非常有用 - 它可以逃避字符串中的不安全字符.它并没有逃脱其他数据类型什么,所以那些需要分开处理.它也不编码%和_,它们在某些查询中用作通配符.

综上所述:

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

  • 伙计们,让我们把这里的热量调低几百度.(旗帜,它们来了,因为这看起来像拳击比赛而不是建设性的对话) (16认同)
  • @thasc它永远不会有帮助.因为这里的每个人都不会要求(也不会给出)理解,而是一个食谱.但是一个没有理解的食谱总会让你失望. (7认同)
  • 你错了mysql_real_escape_string()的描述 (4认同)
  • @TimPost - 只为你... [必备的XKCD参考](http://xkcd.com/327/) (4认同)
  • 重新阅读手册页 (3认同)
  • 啊,这更有说服力,应该首先发布,而不是一切都是神秘的.:p (3认同)
  • @Blowski - 我很坦率地说,看到完全没有链接到小小的桌子.我开始认为XKCD满足Godwin定律,SQL注入是催化剂. (3认同)
  • 两个人认为Blowski的mysql_real_escape_string()描述错误,零解释了原因.那不好...... (2认同)
  • o,rly?将此代码添加到我的,请查看结果 (2认同)
  • @ Col.Shrapnel - 问题是'我什么时候使用`mysql_real_escape_string()`vs`htmlentities()`' 不是'如何阻止SQL注入?'. (2认同)
  • @Core等等什么? (2认同)