没有任何保护,我有一句话:
$check = mysql_query("SELECT * FROM school_users WHERE username = '".$_POST['username']."'")or die(mysql_error());
在我的PHP中。我该如何注入此代码?我已经尝试了许多其他的东西,但似乎没有任何东西可以用于注射。 mysql_query有自动捕获吗?
答案 0 :(得分:2)
签入php.ini
选项magic_quotes_gpc
,您应该将其设置为0
以轻松注入SQL。然后你可以尝试注入代码,你可以在浏览器中使用一些REST插件来实现这一点。作为身体中username
的值使用,例如这样:
username: "' OR 1=1; --"
这将生成如下查询:
SELECT * FROM school_users WHERE username = '' OR 1=1; --
这将永远为真,并将返回school_users
表中的所有行。
答案 1 :(得分:2)
见SQL Injection Attacks by Example。它不是特定于PHP的,而是提供并解释了各种常见攻击的例子。
“SQL Injection”是未经验证/未经过验证的用户输入漏洞的子集(“缓冲区溢出”是一个不同的子集), 的想法是说服应用程序运行不是的SQL代码意 即可。如果应用程序在运行中天真地创建SQL字符串然后运行它们,则可以直接创建一些真正的惊喜。
正如其他人所指出的那样,"magic quotes"等环境因素可以起到一定的作用,减轻SQL注入的唯一可靠方法是使用经过验证的编码实践。有关减轻此类攻击的方法,请参阅How can I prevent SQL injection in PHP?。