没有任何保护,我有这条线:
$check = mysql_query("SELECT * FROM school_users WHERE username = '".$_POST['username']."'")or die(mysql_error());
在我的 php.ini 中。我将如何注入此代码?我尝试了很多其他的东西,但似乎没有任何注射效果。mysql_query 对此有自动捕获吗?
检查您的php.ini
选项magic_quotes_gpc
,您应该将其设置0
为轻松注入 SQL。然后你可以尝试注入你的代码,你可以在浏览器中使用一些REST插件来实现这一点。作为username
在体内使用的值,例如:
username: "' OR 1=1; --"
这将生成如下查询:
SELECT * FROM school_users WHERE username = '' OR 1=1; --
这将始终为真,并将返回school_users
表中的所有行。
请参阅示例 SQL 注入攻击。它不是特定于 PHP 的,但提供并解释了各种常见攻击的示例。
“SQL 注入”是未经验证/未经清理的用户输入漏洞的子集(“缓冲区溢出”是不同的子集),其想法是说服应用程序运行非预期的 SQL 代码。如果应用程序在运行中天真地创建 SQL 字符串然后运行它们,那么很容易产生一些真正的惊喜。
虽然正如其他人所指出的那样,诸如“魔术引号”之类的环境因素可能是一个因素,但减轻 SQL 注入的唯一可靠方法是使用经过验证的编码实践。请参阅如何防止 PHP 中的 SQL 注入?用于减轻此类攻击的方法。