繁体   English   中英

参数charset为utf-8时,在PHP中使用addlashes是否安全?

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

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

实际上,有两个问题合而为一。 因此,最好分别给它们发声。

对于这个问题

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

答案是肯定的,这很安全。
如果单独使用一个单独的示例,如果您的字符集为utf8 ,则添加斜线可以产生一个安全序列以用于SQL字符串文字。

但是,作为一种保护措施,通常被用来“处理所有输入数据以使其安全”,这被证明是绝对不安全的。 哪个问题

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

使其成为唯一答案:

没门!

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

您必须了解的主要威胁不是半神秘的GBK漏洞,而是完全由滥用此功能引起的。 因为它并不是要保护您免受注射伤害。 保护的主题比简单的字符串转义要复杂得多。

问题是要记住很多规则 还有很多可能的失败点。

出于这些原因,简单的字符串转义不能视为全方位的保护规则。

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

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

以上我认为这三个理由足以改变您的方法。

此外,正确实现的参数化查询可以使您的代码更加整洁。 给我您的基于addlashes的代码段,我将向您展示如何使其缩短3-5倍且更简洁。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM