我正在我的网站上测试注射剂,出现此错误

时间:2019-03-03 15:40:38

标签: php mysqli sql-injection

我正在尝试执行此查询以测试注射。 我的查询中的错误在哪里?

<?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中时,会出现错误。

感谢您的帮助和帮助。 简单的答案是使用#代替/*。

再见

2 个答案:

答案 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 = ... 
               ^^^^^^^^^^^^^^^^^^^^^^^^^^                     

请参见https://dev.mysql.com/doc/refman/8.0/en/comments.html

答案 1 :(得分:-1)

您不能在and password = [...]子句之后输入where子句(limit)。 limit必须在查询的结尾。