0

我有一些这样的代码对 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...
}
?>
4

3 回答 3

3

如果黑客通过值:

$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),例如。

于 2013-09-16T19:35:56.057 回答
3

在 PDO 库中使用变量绑定。

于 2013-09-16T19:41:36.507 回答
-1

使用布尔盲注或时间盲注黑客可以检索所有的数据库结构。

例子:

username = 'admin' and if(1=1, sleep(10), 5222) #

此查询需要 10 秒才能返回并确认您的条件是trueor false。使用 information_schema 和 SQL 条件测试,您可以检索所有数据库信息。

于 2013-11-21T16:20:58.860 回答