PHP 的 addslashes()
及其 SQL 注入漏洞
PHP 函数 addslashes()
通常用作防范 SQL 注入攻击的手段,但其局限性可能会损害安全性,特别是在处理多字节字符时。 本文研究了 addslashes()
未能提供足够保护的场景。
多字节字符编码问题
当输入数据包含多字节字符时,addslashes()
可能会错误地插入反斜杠,从而破坏转义序列并产生漏洞。发生这种情况是因为 addslashes()
可能无法准确处理多字节字符的编码。
示例:
<code class="language-php">$input = "⭐' OR 1=1 --"; $escapedInput = addslashes($input); // Escapes as ⭐\' OR 1=1 --</code>
这里,多字节星号字符后面的单引号保持未转义,使系统对 SQL 注入开放。
特定于编码的漏洞
问题源于addslashes()
可能无法正确解释多字节字符编码,例如 EUC-JP 或 Shift-JIS。 这些编码中的某些字符序列可能包含尾随 0x5c 字节,误导 addslashes()
创建多字节字符而不是转义单引号。
最佳实践:超越addslashes()
虽然 addslashes()
提供了一些基本的保护,但它并不是防止 SQL 注入的可靠解决方案,尤其是对于多字节字符集。 为了获得强大的安全性,请使用更先进的技术,例如 mysqli_real_escape_string()
(对于 MySQLi),或者最好使用准备好的语句。 准备好的语句是防止 SQL 注入漏洞的推荐方法。
以上是PHP 中的addslashes() 真的能安全地防止 SQL 注入吗?即使是多字节字符?的详细内容。更多信息请关注PHP中文网其他相关文章!