无法看到我的代码如何被SQL注入,但显然它可以吗?

时间:2015-01-11 08:38:30

标签: php mysql sql-injection

首先,请原谅我看似这样一个原始问题,我对发展很新,我们都必须从某个地方开始!

显然我的代码是开放的SQL注入,事情是我已经测试了以下在线SQL注入教程,我一直在尝试删除表sub_category但它不起作用所以我认为我的代码是安全的?

这就是我在网址中添加的内容:

  

& 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);

请原谅我,如果这似乎是一个愚蠢的问题,我只是想弄清楚事情!

1 个答案:

答案 0 :(得分:3)

(我的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。这就是您的注入尝试不起作用的原因 - 数据库会返回错误,但您的应用程序没有报告它。