mysql - JDBC 驱动程序上的 SQL 注入(inject) - MySQL?

标签 mysql sql jdbc coldfusion sql-injection

好吧,基本上我有点困惑。这个问题是关于 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/

相关文章:

php - 使用 JSON 将 Web 内容提取到 Apache Cordova/Phonegap 应用程序中

mysql - 在数据库升级后在 MySQL 中选择一个枚举不起作用,为什么?

sql - 当我使用 CASE 将字段设置为 NULL 时,为什么 PostgreSQL 会提示类型?

sql - 如何查找有多少客户从一张 table 上购买了不止一种东西

java - 使用JDBC和MySQL解决“通信链接失败”问题

java - 带有 Spring JDBC 的 Postgres "SKIP LOCKED"

java - 如果数据库行不存在,如何插入?

php - SQL Insert 由于某种原因不起作用

mysql - 我可以将 mysql 与 .net 应用程序一起使用吗...或者它只能与 php 一起使用

sql - 从 Doctrine 迁移中获取 SQL