PHP 表单的 SQL 注入威胁


SQL Injection Threat with PHP Forms?

我试图证明在PHP中需要准备好的语句,但是我遇到了一些问题,因为PHP用通过表单传入的字符串做了一些方便奇怪的事情。

我试图"打破"的陈述很简单:

SELECT username FROM users WHERE username = '$username' AND password = '$password'

但是做一些像传入密码X' or TRUE;--这样的事情实际上不起作用,因为 PHP 会自动转义单引号并将语句转换为:

SELECT username FROM users WHERE username = '$username' AND password = 'X'' or TRUE;--'

由于转义的单引号,密码相等性保持不变。这种说法被认为是安全的吗?如果不是,它怎么能被打破?

听起来你打开了魔术引号。我绝对不会认为该语句是安全的,因为如果您要将其移动到运行 PHP 5.4 的服务器上,它将完全容易受到攻击。魔术引号长期以来一直是一个不推荐使用的功能,它可能会弄乱应用程序的其他部分,所以不要依赖它。

要演示,只需在 php.ini 中设置magic_quotes_gpc = Off

这是因为您在PHP环境中启用了魔术报价。它将自动转义字符串,但它们已被弃用,不应使用。它们不是治愈方法,而是补丁。使用适当的卫生方法(如mysql_real_escape_string)要好得多。

http://www.php.net/manual/en/security.magicquotes.what.php

编辑:还准备好了声明!

PHP 中其他"不安全"的安全函数:

addslashes - 您可能认为它是安全的,但它不会过滤掉可能导致注入的多字节字符。