正在尝试对我的数据库执行sql注入。
我还没有转义插入到查询中的字符串,所以我不明白是什么阻止我在用户名输入框中插入: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
您需要在发布的用户名中结束SQL的引号。并完成最后一句话,这样就不会出现语法错误。简单的方法是将其转换为字符串中的1=1版本。CCD_ 1。
因此:
" or ""="