【问题标题】:I'm testing for injection in my website, I get this error我正在我的网站中测试注入,我收到此错误
【发布时间】:2019-07-25 00:23:23
【问题描述】:

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

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

感谢您的帮助和倒数。 简单的答案是使用 # 而不是 /*。

再见

【问题讨论】:

  • 您最好使用参数化查询和准备好的语句。这样你就不需要测试各种 SQL 注入了。
  • 我知道。但是为什么代码不起作用?
  • PHP 无效,请尝试-- 而不是/*
  • 如果将字符串放在 mysql 工作台中,它可以正常工作。但是如果我通过 php mysqli 使用它就不会。这是为什么?看看我的编辑。

标签: php mysqli sql-injection


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您不能在 limit 子句之后输入 where 子句 (and password = [...])。 limit 需要位于查询的末尾。

    【讨论】:

    • 看看我的编辑。如果我将字符串放在 mysql 工作台中,它可以正常工作。但是如果我通过 php mysqli 使用它就不会。这是为什么呢?
    • 因为mysqli_query一次只允许一个查询。一旦您结束查询(通过使用分号),它会将其后的所有其他内容视为错误。
    • 那么这个怎么注入呢? (密码使用的是sh256编码)
    • 我防止注射的方式是我对我接受的输入类型持激进态度。 preg_replace() 是你的朋友。这是唯一的方法吗?不,但它涵盖了大多数场景。
    • @dearsina preg_replace 停止 SQL 注入?你应该看看stackoverflow.com/questions/60174/…
    猜你喜欢
    • 2021-02-16
    • 2012-04-25
    • 1970-01-01
    • 1970-01-01
    • 2011-06-21
    • 2019-09-08
    • 2016-05-05
    • 1970-01-01
    相关资源
    最近更新 更多