簡體   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