多行查询是否安全?

acm*_*acm 5 php sql-injection multilinestring

这可能是一个愚蠢的问题.或许我的黑客技能有限(我根本不练习).

我有一个看起来像这样的查询:

<?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;
?>
Run Code Online (Sandbox Code Playgroud)

$something在使用它之前我有很多其他测试,比如$something = explode(' ',$something);(后来导致字符串)它们都不打算阻止注入但是它们使得给定注入很难得到实际查询.但是,有办法.我们都知道为一个仍然有效的其他东西替换空间是多么容易.

因此,使一个可能有害的SQL片段到达那个问题并不是一个真正的问题$something......但是如果它是多行的话,有没有办法对原始查询字符串的其余部分进行注释?

我可以评论AND table_z.field4 = '1'使用;--但不能评论以下内容AND table_z.field5 = '2'

是否可以打开多行注释/*而不关闭它或看起来像什么,因此允许注入忽略多行查询?

Ada*_*ume 5

这不安全.即使它不能注释掉其余部分,它也可以用SELECT*FROM my_table WHERE 1 = 1作为前缀.


Blu*_*eft 5

$something = "'; DROP TABLE table_x; SELECT * FROM table_z WHERE '1' = '1";
Run Code Online (Sandbox Code Playgroud)