看不到如何 SQL 注入我的代码,但显然可以?

Can't see how my code can be SQL injected but apparently it can?

首先,请原谅我这个看似原始的问题,我对开发还很陌生,我们都必须从某个地方开始!

显然我的代码对 SQL 注入开放,问题是我已经按照在线 SQL 注入教程进行了测试,我一直在尝试删除 table sub_category 但它不起作用所以我认为我的代码是安全的?

这是我在 URL:

&scatid=1059' OR DROP TABLE sub_category //

代码如下:

$scatid = $_GET['scatid'];    
mysql_select_db($database_yappee, $yappee);
                $query_products = "SELECT * FROM products WHERE sub_category='$scatid' AND active = 'Y' ORDER BY id DESC";
                $products = mysql_query($query_products, $yappee) or die(mysql_error());
                $row_products = mysql_fetch_assoc($products);
                $totalRows_products = mysql_num_rows($products);

如果这看起来是个愚蠢的问题,请原谅我,我只是想了解一下事情!

(我的 MySQL 实现使用 # 表示注释,而不是 //)。

用户可以通过以下方式获得您的 所有 产品,无论是否有效:

&scatid=1059' UNION ALL SELECT * from products #

或者更简单的方法:

&scatid=1059' OR 1=1 #

对于每个示例,想象一下查询会是什么样子:

SELECT * FROM products
WHERE sub_category='1059' OR 1=1 #
AND active = 'Y' ORDER BY id DESC

评论设备防止其余的查询妨碍,所以我们基本上有:

SELECT * FROM products
WHERE sub_category='1059' OR 1=1

1=1 将始终为真,因此所有过滤都已被破坏。这在涉及安全的情况下尤其值得关注,例如用户登录系统。

然而,你一直在尝试这个:

&scatid=1059' OR DROP TABLE sub_category //

这将导致 SELECT 语句包含 DROP 语句,该语句无效 SQL。这就是您的注入尝试无效的原因 - 数据库会返回错误,但您的应用程序没有报告它。