Php 无法在不安全窗体上执行sql注入

Php 无法在不安全窗体上执行sql注入,php,mysql,security,sql-injection,Php,Mysql,Security,Sql Injection,正在尝试对我的数据库执行sql注入 我没有逃逸我要插入到查询中的字符串,因此我不明白在将:username或1=1插入到username输入框时,是什么阻止我获取所有用户ID。当我将1=1硬编码到原始查询中时,效果非常好 我在服务器上没有任何其他可能导致这种情况的东西,我只有一个index.php和下面的代码 $conn = mysqli_connect($servername, $username, $password, $dbname); // Check connection if (!$

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

我没有逃逸我要插入到查询中的字符串,因此我不明白在将:username或1=1插入到username输入框时,是什么阻止我获取所有用户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
$conn=mysqli\u connect($servername、$username、$password、$dbname);
//检查连接
如果(!$conn){
die(“连接失败:”.mysqli_connect_error());
}
$sql='从username=“”的用户中选择ID。$\u POST[“username”].';
$result=mysqli\u查询($conn,$sql);
打印(结果);
如果(mysqli_num_行($result)>0){
//每行的输出数据
while($row=mysqli\u fetch\u assoc($result)){
echo“id:”.$row[“id”];
打印(行);
}
}否则{
回显“0结果”;
}
?>
用户名

暗语
您需要在发布的用户名中结束SQL的引号。并完成最后的引用,这样就不会出现语法错误。简单的方法是以字符串形式将其转换为1=1版本<代码>“”=“”

因此:


你为什么不建议他使用
prepare()
bind_param()
方法,因为他正在使用
mysqli
?问题似乎更多的是SQL注入如何工作,而不是如何执行安全编程。但是如果不是这样的话,可以使用前面提到的语句和param函数。老实说,你可以/应该要求他使用这些方法,而不是他在做什么。因此,他和其他将看到此答案的用户将使用它们,并且永远不会使用旧的易受攻击的sql查询。然而,你可以在你的答案底部加上这个。我知道如何防止这种情况。只是想在一个不安全的查询上测试一下,看看它的实际效果。再次感谢你们的帮助。
" or ""="