使用mysql_ *进行SQL注入的安全代码

时间:2014-12-17 03:38:42

标签: php sql-server sql-injection

我只是想知道是否有一种方法可以使用mysql_*安全地为SQL注入创建代码。

我在log.php中有这段代码:

$username = $_POST['username'];
$password = $_POST['password'];
$status = $_POST['status'];

include("conn.php");

if($username && $password)
{
    $query = mysql_query("SELECT * FROM student_users WHERE username='$username'");
    if($query!=0)
    {
        while($rows = mysql_fetch_assoc($query))
        {
            $db_username = $rows['username'];
            $db_password = $rows['password'];
        }

        if($username == $db_username && $password == $db_password)
        {
            header("location: stud.php");
            $_SESSION['username'] = $db_username;
            $_SESSION['stud_num'] = $db_stud_num;
            break;
        }       
    }
}

如何针对SQL注入进行测试?

我找到了一些http://127.0.0.1/test/index.php?username=%27%20or%201=1%20/*&password=1可以用来测试我网站的SQL注入漏洞的想法。但是没有用。

我也尝试在输入字段1 OR 1 = 1; --内输入内容,但仍然无效。

我知道这可能是因为我在我的代码中设置的条件,但我怎么知道SQL注入的其他黑客策略?

也许只是给我一些易于使用的工具来测试本地网站。

感谢您的启发:D

2 个答案:

答案 0 :(得分:2)

$username = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string($_POST['password']);
$status = mysql_real_escape_string($_POST['status']);


 $query = mysql_query("SELECT * FROM student_users WHERE username='$username'");

答案 1 :(得分:2)

尽量不要使用mysql_ *代码。如果您有项目的开头,则将所有代码重写为mysqli或PDO。 (PDO更好。)

如果要在所有输入字段中使用mysql_ *,请使用mysql_real_escape_string。

您可以阅读更多Here