SQL 注入参数在我的页面上不起作用

SQL Injection parameters aren't working on my page

我有一个登录表单,我很困惑为什么我的 SQL 注入参数在这里不起作用。我没有任何功能或方法来防止 SQL 注入。

我为了测试 SQL 注入而制作了这个登录表单,它是用 PHP 编写的。 这是我的代码。

<?php
    include("myconnection.php");

    $error="";
    if(isset($_POST["submit"]))
    {
        if($_POST["username"] == '' || $_POST["password"]== '')
        {
            $error='Please fill the blanks!';

        }else
        {

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

            $sql="SELECT * FROM users WHERE username='$username' AND password='$password'";
            $result=mysqli_query($db,$sql);
            $row=mysqli_fetch_array($result,MYSQLI_ASSOC);

            if(mysqli_num_rows($result)==1)
            {
                $login_user=$_POST["$username"];    
                header("location: myhome.php");
                $error="Connected";

            }
            else
            {

            //$error="Incorrect Username/Password";
              $message="Incorrect Credentials";
              echo "<script='text/javascript'>$message</script>";

            }

        }
    }
    else
    {


    }

?>

我在用户名和密码字段中尝试了 admin'OR'1'='1 以及任何其他可能的基本注入,但它不起作用。我尝试在大多数工作站点中使用基本的 sql 注入并且它有效,我只是很困惑我的代码不接受 sql 注入。

当您的凭据不正确时,它会给我同样的回显。

我希望这是出于学术目的,因为我不知道为什么你会想要在任何生产网站上使用它。话虽如此,这可能是因为对于 return 任何结果的查询,AND 也需要为真。如果您在用户名字段中提交了 admin'OR'1'='1,您的查询将看起来像

SELECT * FROM users WHERE username='admin'OR'1'='1' AND password='123'

这对我来说是 WHERE username equals admin OR 1 equals 1 AND password equals 123。您可能需要弄清楚如何绕过该检查,因为它仍然会尝试匹配密码字段,反之亦然场.

说起来有点奇怪,但如果你想注入一些东西,也许这会在用户名字段中起作用injection' OR 1 LIMII 1#这会产生这样的东西

SELECT * FROM users WHERE username = 'injection' OR 1 LIMIT 1#' AND password = 'pass'

本质上您已经在注入 SQL,只是您没有以产生您想要的结果的方式进行注入。尝试回显查询并直接在 mySQL CLI 中 运行 它以查看结果集是什么以及它是否是有效查询。也许在那里尝试查询以尝试获得您想要的注射。