gpt4 book ai didi

php - 页面只显示一个结果是不是不能进行SQL注入(inject)?

转载 作者:行者123 更新时间:2023-11-30 23:58:08 26 4
gpt4 key购买 nike

我在大学里为我的安全模块做一个 SQL 注入(inject)项目,我想了解它是如何工作的。

我可以看到当脚本不过滤输入时它是如何工作的,然后循环遍历数据库结果集,在屏幕上显示数据。但据我所知,以下代码容易受到 SQL 注入(inject)的影响,因为它只希望在屏幕上显示一组值:

<?php
mysql_connect("localhost", "root", "");
mysql_select_db("testdb");

$result = mysql_query("SELECT id, name, description FROM test_table WHERE id = ".$_GET['id']);

list($id, $name, $description) = mysql_fetch_row($result);

echo "ID: $id \n";
echo "Name: $name \n";
echo "Description: $description \n";

?>

如果我将 id 的值设置为:

1 OR 1 = 1 UNION SELECT id, username, password FROM users LIMIT 1, 1 -- 

不显示查询的 UNION 部分的值,除非我运行 mysql_fetch_row($result) 语句两次,如下所示:

<?php
$result = mysql_query("SELECT id, name, description FROM test_table WHERE id = ".$_GET['id']);

list($id, $name, $description) = mysql_fetch_row($result);

echo "ID: $id \n";
echo "Name: $name \n";
echo "Description: $description \n";

list($id, $name, $description) = mysql_fetch_row($result);

echo "ID: $id \n";
echo "Name: $name \n";
echo "Description: $description \n";
?>

只有这样,才会显示语句的 UNION 部分的值(即用户名、密码)。

如果有人对此有所了解,您能否确认我所说的上述代码不受 SQL 注入(inject)影响是正确的,因为它只希望在屏幕上显示一组值。

如有错误请指正

感谢您的帮助。

最佳答案

大多数人不明白什么是注入(inject)。

他们将注入(inject)利用与注入(inject)本身混淆了。

说到注入(inject),只要您在查询中允许不需要的代码 - 注入(inject)是可能的,即使您注入(inject)的只是“Hello Kitty”(超出预期边界)。

因此,对于新手程序员可以设计的所有数百万个问题,“如果我有这个怎么办”,“如果我没有那个怎么办”,答案都是一样的 - 是的,注入(inject)是可能的。

说到漏洞利用,技术比您想象的要多得多,其中一些非常复杂。因此,要回答“这种注入(inject)可利用吗?”这个问题,答案很可能也是肯定的。

因此,不要用“这可能吗?”的问题来打扰自己。这个问题没有丝毫意义。您所需要的只是编写防注入(inject)代码。这就是为什么这个问题不好。因为你应该问

如何编写防注入(inject)代码?

相反。

关于php - 页面只显示一个结果是不是不能进行SQL注入(inject)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24309949/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com