PHP表单的SQL注入威胁?

时间:2012-05-26 16:24:28

标签: php sql sql-injection

我试图在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;--'

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

2 个答案:

答案 0 :(得分:5)

听起来你的魔法引号已经打开了。我肯定不会认为该语句是安全的,就好像你将它移动到运行PHP 5.4的服务器一样,它将完全容易受到攻击。魔术引号长期以来一直被弃用,它可以搞乱应用程序的其他部分,所以不要依赖它。

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

答案 1 :(得分:2)

那是因为您在PHP环境中启用了Magic Quotes。它将自动转义字符串,但不推荐使用它们,不应使用它们。它们不是治愈方法,它们是一种补丁。您可以更好地使用适当的卫生方法,例如mysql_real_escape_string

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

编辑:还准备好了陈述!

其他"不安全" PHP中的安全功能:

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