-2

没有任何保护,我有这条线:

$check = mysql_query("SELECT * FROM school_users WHERE username = '".$_POST['username']."'")or die(mysql_error());

在我的 php.ini 中。我将如何注入此代码?我尝试了很多其他的东西,但似乎没有任何注射效果。mysql_query 对此有自动捕获吗?

4

2 回答 2

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表中的所有行。

于 2013-02-09T22:08:56.640 回答
2

请参阅示例 SQL 注入攻击。它不是特定于 PHP 的,但提供并解释了各种常见攻击的示例。

“SQL 注入”是未经验证/未经清理的用户输入漏洞的子集(“缓冲区溢出”是不同的子集),其想法是说服应用程序运行非预期的 SQL 代码。如果应用程序在运行中天真地创建 SQL 字符串然后运行它们,那么很容易产生一些真正的惊喜。

虽然正如其他人所指出的那样,诸如“魔术引号”之类的环境因素可能是一个因素,但减轻 SQL 注入的唯一可靠方法是使用经过验证的编码实践。请参阅如何防止 PHP 中的 SQL 注入?用于减轻此类攻击的方法。

于 2013-02-09T22:09:39.383 回答