繁体   English   中英

MyBatis保护字符串替换参数免受SQL注入

[英]MyBatis protect String Substitution parameter from sql injection

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

从我所看到的来看,替换是使用TokenHandler.handleToken方法在GenericTokenParser类中自动完成的。

关于这些价值,我找不到任何东西。 我可以使用以下方法访问PreparedStatement参数

sqlSession.getConfiguration().getMappedStatement(statement).getBoundSql(parameter).getParameterMappings()

但是我确实需要在发送请求之前检索${}参数,以便能够在需要时修改值,以防止受到SQL Injection的攻击。

我虽然要使用AspectJ来拦截TokenHandler.handleToken方法。 但是我真的更希望能够注入自己的处理程序或令牌解析器。

有线索吗?


我正在为将来的开发制定“框架”,目的是要自动化。 遍历整个参数对象不是一个选择(可能很繁重),我们只想在执行请求之前保护那些在请求中使用的对象。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM