我正在尝试执行此查询以测试注射。 我的查询中的错误在哪里?
<?php
$query= "SELECT * FROM login where email = '1' or '1' = '1' limit 1;/*' and password = '1e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855223'";
$result = mysqli_query($connection,$query) or die(mysqli_error($connection));
?>
结果错误:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '/*' and password = '1e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b785' at line 1
如果我在mysql工作台中进行查询,则可以正常运行,但是当放置在mysqli中时,会出现错误。
感谢您的帮助和帮助。 简单的答案是使用#代替/*。
再见
答案 0 :(得分:0)
MySQL支持/* ... */
样式的注释语法,但是您需要使用结尾部分。由于您正在尝试SQL注入,因此您通常没有机会修改SQL查询,除非只有一点。因此,您也无法将注释的*/
结尾部分附加到查询末尾。
示例:您需要在末尾添加结束注释语法,如下所示,但是由于仅在$email
变量上使用SQL注入,因此无法执行此操作。
WHERE email = '1' or '1' = '1' limit 1;/*' and password = ... */
^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^
MySQL还支持ANSI SQL注释语法,该语法在该行的其余部分之前是一个--
。 --
之后的所有内容都将被忽略,并且这种注释没有结束语法。
WHERE email = '1' or '1' = '1' limit 1;--' and password = ...
^^^^^^^^^^^^^^^^^^^^^^^^^^
答案 1 :(得分:-1)
您不能在and password = [...]
子句之后输入where子句(limit
)。 limit
必须在查询的结尾。