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

这个问题在这里已经有了答案:

  • 为什么我不应该在PHP中使用mysql_ *函数? 14个答案

  • (我的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。 这就是为什么你的注入尝试不起作用 - 数据库将返回一个错误,但你的应用程序没有报告它。

    链接地址: http://www.djcxy.com/p/16773.html

    上一篇: Can't see how my code can be SQL injected but apparently it can?

    下一篇: SQL injection attack with php