当参数charset为utf-8时,在php中使用addslash是否安全


Is it safe using addslashes in php when parameter charset is utf-8?

我读过很多关于addslash对SQL注入不安全的文章,但它们都引用了使用GBK编码的相同示例。所以我的问题是:当参数charset为utf-8时,使用addslashes()来防止php中的SQL注入是否安全?

事实上,一个问题中有两个问题。因此,最好分别为他们发声。

对于问题

如果字符集是utf8,那么使用addslashes()是否安全?

答案是肯定的,它是安全的
单独举一个例子,如果您的字符集是utf8,那么addslash可以生成一个安全的序列,用于SQL字符串文字。

然而,作为一种保护措施,正如通常使用的那样,旨在";处理所有输入数据以使其安全";事实证明,它是致命的不安全。的问题

使用addslashes()防止SQL注入是否安全

使其成为唯一的答案:

没门

仅仅因为这种诚实的功能与防止任何注射无关。从来没有。

您必须理解的是,主要威胁并非来自半虚构的GBK漏洞,而是完全来自对该功能的滥用因为这不是为了保护你免受注射。保护主题比简单的字符串转义复杂得多。

问题是有很多规则需要牢记。还有很多可能失败的地方。

由于这些原因,简单的字符串转义不能被视为一种包罗万象的保护规则。

从这个角度来看,参数化查询虽然不能提供100%的保护,但无论如何都可以被认为是一种更好的措施,可以消除三种最危险的威胁:

  • 由于数字也包含在内,因此无法通过数字文字进行注入
  • 由于格式完整,错误转义的标识符不是漏洞,而是开发阶段的错误
  • 由于自动格式化,消除了人为错误

我认为以上三个原因足以改变你的做法。

此外,正确实现的参数化查询使代码更加简洁。给我你的基于addslashes的代码片段,我将向你展示如何使它更短、更干净3-5倍。