我读过很多关于addslash对SQL注入不安全的文章,但它们都引用了使用GBK编码的相同示例。所以我的问题是:当参数charset为utf-8时,使用addslashes()来防止php中的SQL注入是否安全?
事实上,一个问题中有两个问题。因此,最好分别为他们发声。
对于问题
如果字符集是utf8,那么使用addslashes()是否安全?
答案是肯定的,它是安全的
单独举一个例子,如果您的字符集是utf8
,那么addslash可以生成一个安全的序列,用于SQL字符串文字。
然而,作为一种保护措施,正如通常使用的那样,旨在";处理所有输入数据以使其安全";事实证明,它是致命的不安全。的问题
使用addslashes()防止SQL注入是否安全
使其成为唯一的答案:
没门
仅仅因为这种诚实的功能与防止任何注射无关。从来没有。
您必须理解的是,主要威胁并非来自半虚构的GBK漏洞,而是完全来自对该功能的滥用因为这不是为了保护你免受注射。保护主题比简单的字符串转义复杂得多。
问题是有很多规则需要牢记。还有很多可能失败的地方。
由于这些原因,简单的字符串转义不能被视为一种包罗万象的保护规则。
从这个角度来看,参数化查询虽然不能提供100%的保护,但无论如何都可以被认为是一种更好的措施,可以消除三种最危险的威胁:
- 由于数字也包含在内,因此无法通过数字文字进行注入
- 由于格式完整,错误转义的标识符不是漏洞,而是开发阶段的错误
- 由于自动格式化,消除了人为错误
我认为以上三个原因足以改变你的做法。
此外,正确实现的参数化查询使代码更加简洁。给我你的基于addslashes的代码片段,我将向你展示如何使它更短、更干净3-5倍。