当参数字符集为 utf-8 时,在 php 中使用 addslashes 是否安全?
Is it safe using addslashes in php when parameter charset is utf-8?
我读过很多 post 谈论 addslashes 对于 SQL 注入是不安全的,
但它们都引用了使用 GBK 编码的相同示例。
所以我的问题是:
当参数字符集为 utf-8 时,使用 addslashes() 来防止 php 中的 SQL 注入是否安全?
实际上,一题两题。所以最好分开发声。
对于问题
Is it safe using addslashes() if charset is utf8?
答案是肯定的,它是安全的。
单独来看,如果您的字符集是 utf8
.
,则 addslashes 可以生成一个安全序列用于 SQL 字符串文字
然而,作为一种保护措施,如通常使用的那样,旨在“处理所有输入数据以使其安全”,它被证明是致命的不安全。问题
Is it safe using addslashes() to prevent SQL injection
使其成为唯一的答案:
不行!
仅仅是因为这个诚实的功能与防止任何注入无关。从来没有。
您必须了解的是,主要威胁 并非来自半神话的 GBK 漏洞,而是完全来自 对该功能的滥用. 因为它并不是为了保护您免受注射。保护的话题比简单的字符串转义要复杂得多。
问题是有一个lot of rules to keep in mind。而且还有很多可能失败的点。
由于这些原因,简单的字符串转义不能被视为包罗万象的保护规则。
从这个角度来看,参数化查询虽然没有提供 100% 的保护,但无论如何都可以被认为是一种更好的措施,消除了三种最危险的威胁:
- 因为数字也被覆盖了,无法通过数字字面量注入
- 由于完整的格式,错误转义的标识符不是漏洞而是开发阶段错误。
- 由于自动格式化,消除了人为错误
以上这三个原因我认为足以改变你的做法。
此外,正确实施的参数化查询可使您的代码更加简洁。将基于 addslashes 的代码片段提供给我,我将向您展示如何将其缩短 3-5 倍并使其更清晰。
我读过很多 post 谈论 addslashes 对于 SQL 注入是不安全的, 但它们都引用了使用 GBK 编码的相同示例。 所以我的问题是: 当参数字符集为 utf-8 时,使用 addslashes() 来防止 php 中的 SQL 注入是否安全?
实际上,一题两题。所以最好分开发声。
对于问题
Is it safe using addslashes() if charset is utf8?
答案是肯定的,它是安全的。
单独来看,如果您的字符集是 utf8
.
然而,作为一种保护措施,如通常使用的那样,旨在“处理所有输入数据以使其安全”,它被证明是致命的不安全。问题
Is it safe using addslashes() to prevent SQL injection
使其成为唯一的答案:
不行!
仅仅是因为这个诚实的功能与防止任何注入无关。从来没有。
您必须了解的是,主要威胁 并非来自半神话的 GBK 漏洞,而是完全来自 对该功能的滥用. 因为它并不是为了保护您免受注射。保护的话题比简单的字符串转义要复杂得多。
问题是有一个lot of rules to keep in mind。而且还有很多可能失败的点。
由于这些原因,简单的字符串转义不能被视为包罗万象的保护规则。
从这个角度来看,参数化查询虽然没有提供 100% 的保护,但无论如何都可以被认为是一种更好的措施,消除了三种最危险的威胁:
- 因为数字也被覆盖了,无法通过数字字面量注入
- 由于完整的格式,错误转义的标识符不是漏洞而是开发阶段错误。
- 由于自动格式化,消除了人为错误
以上这三个原因我认为足以改变你的做法。
此外,正确实施的参数化查询可使您的代码更加简洁。将基于 addslashes 的代码片段提供给我,我将向您展示如何将其缩短 3-5 倍并使其更清晰。