我看过很多关于addlashes的帖子,对于SQL注入是不安全的, 但他们都使用GBK编码引用相同的例子。 所以我的问题是: 当参数字符集是utf-8时,使用addslashes()来防止在PHP中注入SQL是否安全?
答案 0 :(得分:2)
事实上,一个问题有两个问题。所以最好分开发言。
关于问题
如果charset是utf8,那么使用addslashes()是否安全?
答案是肯定的,这是安全的
单独使用,如果您的字符集是utf8
,则使用隔离示例,addslashes可以生成在SQL字符串文字中使用的安全序列。
然而,作为一种保护措施,通常用于处理所有输入数据,以确保其安全"它被证明是致命的不安全。哪个问题
使用addslashes()来防止SQL注入是否安全
使它成为唯一的答案:
仅仅因为这个诚实的功能与防止任何注射无关。从来没有。
您必须了解的是,主要威胁不是来自半神话GBK漏洞,而是完全来自滥用此功能。因为它& #39; s并不是为了保护您免受注射。保护主题比简单的字符串转义复杂得多。
问题是有lot of rules to keep in mind。并且有很多可能的失败点。
由于这些原因,简单的字符串转义不能被视为一个包罗万象的保护规则。
从这个角度来看,参数化查询虽然没有提供100%的保护,但无论如何都可以被视为一种更好的衡量标准,消除了三种最危险的威胁:
以上这三个原因我认为足以改变你的做法。
此外,正确实现的参数化查询使您的代码更加清晰。给我你的基于addlashes的代码片段,我将向您展示如何使它缩短3-5倍并且更清洁。