代码之家  ›  专栏  ›  技术社区  ›  vuffer

无法对不安全的窗体执行sql注入

  •  0
  • vuffer  · 技术社区  · 5 年前

    我没有转义要插入到查询中的字符串,所以我不明白是什么阻止了我在向用户名输入框中插入:username或1=1时获取所有用户ID。当我将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
    
    1 回复  |  直到 5 年前
        1
  •  1
  •   danblack    5 年前

    您需要在发布的用户名中结束SQL的引用。完成最后一个引号,这样就不会出现语法错误。简单的方法是用字符串将其转换成1=1版本。 ""=""

    所以:

    " or ""="