我一直读到魔法引号根本不停止SQL注入,但我不明白为什么不停止!例如,假设我们有以下查询:
SELECT * FROM tablename WHERE email='$x';
现在,如果用户输入 $x=' OR 1=1 -- ,查询将是:
$x=' OR 1=1 --
SELECT * FROM tablename WHERE email='\' OR 1=1 --';
反斜杠将由魔法引号添加,不会造成任何损坏!
有没有一种方法我看不到用户可以在这里绕过魔术引号插入?
技巧通常是传递一个二进制值,以便反斜杠成为有效多字节字符的一部分。这里是一个 blog post 关于它。