当我试图理解sqlinjection时,我没有得到这部分,首先这是我的代码
<?php
include "../chat/db.php";
if (isset($_GET['id'])) {
$id = $_GET['id'];
$query = "select user_n,user_id from users where user_id<$id union select 1,2 ";
$sql = mysqli_query($con, $query);
if ($sql) {
if (mysqli_num_rows($sql) > 0) {
while ($result = mysqli_fetch_assoc($sql))
echo "user name: " . $result["user_n"] . "of the id= " . $result["user_id"] . "</br>";
} else {
echo "there's no results";
}
}
} else {
echo "error";
}
$tt = rand(0, 30);
?>
</br>
<a href=<?php echo "sql.php?id=" . $tt; ?>> <?php echo $tt; ?> </a>
结果很好,正如你在这张图片中看到的结果
我不明白的是这个联合选择1,2的结果
{user name:1of the id=2}出现是因为
union select 1,2
我的问题是为什么会出现这样的情况,如果有人能解释一下“选择1,2”这个步骤,谢谢你,如果有什么不清楚的地方,请回答,或者我解释得不好。
1条答案
按热度按时间7tofc5zh1#
任何请求都可以通过sql注入操作查询。
例如,我可以请求您的页面:
基本上,任何人都可以注入任何sql查询,只要该查询选择两个表达式。只要加一个数字就可以了
id < $id
但是$id
可以继续处理任何其他请求传递给php代码。我不知道为什么查询包括
union select 1,2
. 我想这是一个在课堂上教你sql注入风险和union select 1,2
是一种让指导者提示您sql注入涉及联合的方法。您可以通过以下两种方式之一使此查询更安全:
将参数强制转换为数字,这将删除任何非数字部分:
使用查询参数:
看看如何在php中防止sql注入?有关查询参数的详细信息。