无法在不安全的表单上执行 sql 注入

cannot perform sql injection on a unsecure form

正在尝试对我的数据库执行 sql 注入。

我没有对要插入到查询中的字符串进行转义,所以我不明白是什么阻止我在将以下内容插入时获取所有用户 ID:用户名或 1=1 到用户名输入框。当我将 1=1 硬编码到原始查询中时,它就像一个魅力。

我在服务器上没有其他任何东西会导致这个,我只有一个 index.php 和下面的代码。

$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}

$sql = 'SELECT ID FROM users WHERE username = "'.$_POST["username"].'"';
$result = mysqli_query($conn, $sql);
print_r($result);

if (mysqli_num_rows($result) > 0) {
    // output data of each row
    while($row = mysqli_fetch_assoc($result)) {
        echo "id: " . $row["ID"];
        print_r($row);
    }
} else {
    echo "0 results";
}

?>
<form method='POST' action='#'>
        username <input type'text' name='username'></input>
        <br>
        password <input type'text' name='password'></input>
        <input type='submit'>
    </form>
    <?php

您需要在发布的用户名中结束 SQL 的引号。并完成最后的引用,这样它就不是语法错误了。简单的方法是将它变成字符串中的 1=1 版本。 ""="".

所以:

" or ""="