代码之家  ›  专栏  ›  技术社区  ›  acm

多行查询sql注入安全吗?

  •  5
  • acm  · 技术社区  · 15 年前

    这也许是个愚蠢的问题。

    我有这样一个查询:

    <?php
    $query =<<<eot
        SELECT      table_x.field1,
                    table_x.field2,
                    table_y.*,
                    table_z.field4
        FROM        (
                        SELECT ...
                    ) as table_y
        LEFT JOIN   table_x
        ON          table_x.field1 = table_y.field_x
        LEFT JOIN   table_z
        ON          table_z.field1 = table_y.field_z
        WHERE       table_x.field3 = '$something'
        AND         table_z.field4 = '1'
        AND         table_z.field5 = '2'
    eot;
    ?>
    

    我还有很多其他的测试 $something 在它被使用之前,比如 $something = explode(' ',$something); 不过,也有办法。我们都知道用一个空格来代替另一个仍然有效的空格是多么容易。。

    差不多吧

    我可以评论 AND table_z.field4 = '1' ;-- AND table_z.field5 = '2'

    是否可以打开多行注释 /* 不关闭它或类似的东西,从而允许注入忽略多行查询?

    4 回复  |  直到 15 年前
        1
  •  5
  •   Adam Crume    15 年前

    这不安全。即使它不能注释掉其余部分,它也可以在它前面加上SELECT*,FROM my\ u table,其中1=1。

        2
  •  5
  •   BlueRaja - Danny Pflughoeft    15 年前
    $something = "'; DROP TABLE table_x; SELECT * FROM table_z WHERE '1' = '1";
    
        3
  •  3
  •   selfawaresoup    15 年前

    使用事先准备好的声明以确保安全:

    http://www.php.net/manual/en/pdo.prepare.php

    如果输入没有得到充分的清理,字符串插值总是有代码注入的风险。

        4
  •  2
  •   Entendu    15 年前
    推荐文章