java - MyBatis 保护字符串替换参数免受 sql 注入(inject)

标签 java sql sql-injection mybatis ibatis

我需要在 MyBatis 中使用字符串替换来保护(自动)请求 ${myValue) .

据我所知,替换是在 GenericTokenParser 中自动完成的。使用 TokenHandler.handleToken 的类方法。

我找不到任何关于获取这些值(value)观的信息。 我可以使用

访问PreparedStatement 参数
sqlSession.getConfiguration().getMappedStatement(statement).getBoundSql(parameter).getParameterMappings()

但我确实需要检索${}在发送请求之前修改参数,以便能够在需要时修改值以防止 SQL 注入(inject)。

我考虑使用 AspectJ 来拦截 TokenHandler.handleToken方法。但我真的更希望能够注入(inject)我自己的处理程序或 token 解析器。

有人知道吗?

<小时/>

我正在为 future 的发展制定一个“框架”,目标是实现自动化。遍历整个参数对象不是一个选项(可能很重),我们只想在执行请求之前保护请求中使用的参数。

最佳答案

MyBatis 有 2 种替换方法。 ${} 方法会直接进行字符串替换(即属性替换),因此很容易受到 SQL 注入(inject)的攻击。 #{} 方法对 PreparedStatement 进行参数替换,因此它不易受到攻击。

您确定要使用${}吗?除非您动态构建 SQL 语句,否则您可能需要使用 #{}。如果您正在构建动态 SQL,那么您应该在加载 MyBatis 配置之前验证参数。

关于java - MyBatis 保护字符串替换参数免受 sql 注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24201209/

相关文章:

java - while & for 循环和 JOptionPane 数据输入连接到 for 循环

java - 显示菜单项的弹出菜单

sql - 如何优化使用cte、group by并运行20+小时的SQL查询?

sql - 如何在 Rails 中执行任意参数化 SQL

php - 仍然使用 PDO 参数化查询攻击 SQL 注入(inject)

java - 为命令提示符循环切换 vs map

java - 此位置不允许使用注释 @Index

SQL:如何跟踪相关子查询中已经匹配的行?

sql - 如何使用 SQL 作业将数据导出到 SQL Server 中的 Excel

php - 如何演示二阶 SQL 注入(inject)?