gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 03:01:13 25 4
gpt4 key购买 nike

我需要在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com