无法看到我的代码如何被SQL注入,但显然它可以?
这个问题在这里已经有了答案:
(我的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 //
这将导致包含DROP
语句的SELECT
语句,该语句不是有效的SQL。 这就是为什么你的注入尝试不起作用 - 数据库将返回一个错误,但你的应用程序没有报告它。
上一篇: Can't see how my code can be SQL injected but apparently it can?