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

时间:2016-05-11 10:47:14

标签: php mysql sql-injection

我看过很多关于addlashes的帖子,对于SQL注入是不安全的, 但他们都使用GBK编码引用相同的例子。 所以我的问题是: 当参数字符集是utf-8时,使用addslashes()来防止在PHP中注入SQL是否安全?

1 个答案:

答案 0 :(得分:2)

事实上,一个问题有两个问题。所以最好分开发言。

关于问题

  

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

答案是肯定的,这是安全的 单独使用,如果您的字符集是utf8,则使用隔离示例,addslashes可以生成在SQL字符串文字中使用的安全序列。

然而,作为一种保护措施,通常用于处理所有输入数据,以确保其安全"它被证明是致命的不安全。哪个问题

  

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

使它成为唯一的答案:

没有办法!

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

您必须了解的是,主要威胁不是来自半神话GBK漏洞,而是完全来自滥用此功能。因为它& #39; s并不是为了保护您免受注射。保护主题比简单的字符串转义复杂得多。

问题是有lot of rules to keep in mind。并且有很多可能的失败点。

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

从这个角度来看,参数化查询虽然没有提供100%的保护,但无论如何都可以被视为一种更好的衡量标准,消除了三种最危险的威胁:

  • 因为数字也被覆盖,所以没有办法通过数字文字注入
  • 由于完全格式化,错误转义的标识符不会成为漏洞,而是一个开发阶段错误。
  • 由于自动格式化,消除了人为错误

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

此外,正确实现的参数化查询使您的代码更加清晰。给我你的基于addlashes的代码片段,我将向您展示如何使它缩短3-5倍并且更清洁。