无法在不安全的表单上执行 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 ""="
正在尝试对我的数据库执行 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 ""="