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


Safe code for SQL Injection using mysql_*

我只想知道是否有办法让你的代码使用mysql_*安全地进行SQL注入。

我的日志中有以下代码.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

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

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

你可以在这里阅读更多

$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'");