我有一些这样的代码,可以使用SQL注入。我们被黑了,现在我们修复了它。我只是想知道输入(用户名和密码)必须是什么,以破解此代码。我的意思是即使你输入
username = something' OR 'x'='x
然后,无论用户名如何,您都可以检索表中第一个用户的密码。但是,在if
内,我们检查此密码是否正确。我假设密码非常简单(就像123456
一样简单)并且黑客从字典中蛮力。但是,我想知道是否有另一种方法可以使用除强制密码之外的注入来破解此代码。
<?php
$username=$_POST['username'];
$password=$_POST['password'];
$result=runQuery("SELECT password FROM tbl_users WHERE username='".$username."''");
$row=mysql_fetch_array($result);
if($row['password']==$password){
-- do sth... create a cookie etc..
}
else{
--go to another page...
}
?>
答案 0 :(得分:2)
如果黑客通过值:
$username = "' OR * OR '"
然后查询将是:
SELECT password FROM tbl_users WHERE username='' OR * OR '';
- 这将选择任何用户。
但是黑客可以:
$username = "'; DELETE * FROM tbl_users WHERE username = * OR '";
SELECT password FROM tbl_users WHERE username = ''; DELETE * FROM tbl_users WHERE username = * OR '';
或者可以让UPDATE
更改任何密码。
安全?例如mysql_real_escape_string
或preg_match("/^[a-zA-Z0-9]{3,15}$/", $username)
。
答案 1 :(得分:2)
在PDO库中使用变量绑定。
答案 2 :(得分:-1)
使用布尔盲或时间盲注入黑客可以检索所有数据库结构。
示例:
username = 'admin' and if(1=1, sleep(10), 5222) #
此查询需要10秒才能返回,并确认您的条件为true
或false
。使用information_schema和SQL条件测试,您可以检索所有数据库信息。