看不到如何 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。这就是您的注入尝试无效的原因 - 数据库会返回错误,但您的应用程序没有报告它。
首先,请原谅我这个看似原始的问题,我对开发还很陌生,我们都必须从某个地方开始!
显然我的代码对 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。这就是您的注入尝试无效的原因 - 数据库会返回错误,但您的应用程序没有报告它。