好吧,基本上我有点困惑。这个问题是关于 JDBC 驱动程序的。基本上我们拥有一个托管在该驱动程序上的服务器,并且它运行 MYSQL。我们使用 Coldfusion 作为我们选择的语言。我们有一个 GET 参数 ?lang=
并在其中注入(inject)字符'\'会提示错误: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
并且没有其他字符会导致此错误。我在这里有点担心。谁能告诉我攻击者如何对这个参数进行 SQL 注入(inject)攻击?所以我可以理解如何过滤它,因为在我的代码中我在 \
上正确过滤了 preg_match字符,但我仍然收到此错误。我怎样才能注入(inject)这个参数?有人能给我指点指南什么的吗,或者如果可能的话。这样我就可以放心地假设它不是。但无论如何,如果需要此信息,mysql 版本是 5.1.30
确切的驱动程序名称是 MySQL-AB JDBC Driver
。感谢您花时间帮助我!
最佳答案
\
可以是mysql中的转义字符。
例如,攻击者可以使用 \b
序列删除查询的部分并用它们自己注入(inject)的 sql 重写。
防止sql注入(inject)攻击最可靠的方法是使用参数化查询。
另请参阅:
还要注意,在许多数据库中(对 JDBC/Mysql 组合不是绝对确定),也可以将通配符“注入(inject)”到 sql LIKE
中。子句,即使使用参数化查询也是如此。在这种特殊情况下,“注入(inject)”并不总是一个问题 - 事实上,在许多情况下,它可能正是所需的行为。然而,这可能是一个问题,例如,如果您正在做一些可怕的事情,例如 SELECT * FROM Users WHERE UserName LIKE @userInput AND Password LIKE @passwordInput
(这将允许任何人只需在屏幕上的两个字段中输入 %
通配符即可登录)。
关于mysql - JDBC 驱动程序上的 SQL 注入(inject) - MySQL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22933747/