[英]Mybatis - preventing agains SQL Injection in LIKE query
我正在使用sql server
。 讓我們在mybatis
查看以下查詢:
param
是字符串類型,在數據庫中SomeColumn
是VARCHAR
類型
...
= 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.