繁体   English   中英

Mybatis-防止在LIKE查询中再次进行SQL注入

[英]Mybatis - preventing agains SQL Injection in LIKE query

我正在使用sql server 让我们在mybatis查看以下查询:
param是字符串类型,在数据库中SomeColumnVARCHAR类型

...
 = SomeColumn LIKE '%#{param, jdbcType=VARCHAR}%'  

它返回错误:

org.mybatis.spring.MyBatisSystemException:嵌套异常为org.apache.ibatis.type.TypeException:无法设置映射参数:ParameterMapping {property ='param',mode = IN,javaType = class java.lang.Object,jdbcType = VARCHAR,numericalScale = null,resultMapId ='null',jdbcTypeName ='null',expression ='null'}。 原因:org.apache.ibatis.type.TypeException:使用JdbcType null为参数#1设置非null时出错。 尝试为此参数或其他配置属性设置不同的JdbcType。 原因:org.apache.ibatis.type.TypeException:使用JdbcType VARCHAR为参数#1设置非null时出错。 尝试为此参数或其他配置属性设置不同的JdbcType。 原因:com.microsoft.sqlserver.jdbc.SQLServerException:索引1超出范围。

我无法处理(任何想法?),但是我发现了一些东西:

...    
<bind name="param" value="'%' + param + '%'" />
...
     = SomeColumn LIKE #{param}    

它确实有效。 我认为这阻止了我的SQL Injection但我不确定。 你能回答吗? SQL Injection安全吗?

我们遇到了同样的问题,以下方法对我们有效:

例如,从TABLE1中选择*,其中COLUMN1如'%'||。 #{PARAM_NAME} || '%';

这样可以防止SQL注入,并允许在LIKE查询中使用#。

暂无
暂无

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

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