首先,请原谅我看似这样一个原始问题,我对发展很新,我们都必须从某个地方开始!
显然我的代码是开放的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);
请原谅我,如果这似乎是一个愚蠢的问题,我只是想弄清楚事情!
答案 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。这就是您的注入尝试不起作用的原因 - 数据库会返回错误,但您的应用程序没有报告它。