Java Mybatis-防止类似查询中的SQL注入
我正在使用sql server。让我们在mybatis中查看以下查询: param是字符串的类型,在数据库中SomeColumn是VARCHAR的类型 它返回错误: org.mybatis.spring.MyBatisSystemException:嵌套异常为 org.apache.ibatis.type.TypeException:无法为设置参数 映射:ParameterMapping{property='param',mode=IN,javaType=class java.lang.Object,jdbcType=VARCHAR,numericScale=null, resultMapId='null',jdbcTypeName='null',expression='null'}。原因: org.apache.ibatis.type.TypeException:将 JdbcType为null的参数1。尝试为设置不同的JdbcType 此参数或其他配置属性。原因: org.apache.ibatis.type.TypeException:将 参数1带有JdbcType VARCHAR。尝试为设置不同的JdbcType 此参数或其他配置属性。原因: com.microsoft.sqlserver.jdbc.SQLServerException:索引1超出 射程 我无法处理任何想法,但我发现:Java Mybatis-防止类似查询中的SQL注入,java,sql,sql-server,mybatis,Java,Sql,Sql Server,Mybatis,我正在使用sql server。让我们在mybatis中查看以下查询: param是字符串的类型,在数据库中SomeColumn是VARCHAR的类型 它返回错误: org.mybatis.spring.MyBatisSystemException:嵌套异常为 org.apache.ibatis.type.TypeException:无法为设置参数 映射:ParameterMapping{property='param',mode=IN,javaType=class java.lang.Obje
...
<bind name="param" value="'%' + param + '%'" />
...
= SomeColumn LIKE #{param}
它确实有效。我认为这会阻止我再次进行SQL注入,但我不确定。你能回答吗?SQL注入安全吗?我们面临同样的问题,下面的方法对我们有效: e、 g从表1中选择*,其中列1类似“%”| |{PARAM_NAME}| |‘%”
这可以防止SQL注入,并允许在LIKE查询中使用。在将想要的参数连接到开头和结尾之前,需要对参数中的所有%进行转义。例如:好的,但请告诉我,我使用bind的方法是否是SQLInjection安全的?您能告诉我如何以您的方式逃避它吗?这个例子并没有帮助meI最近学会了另一种方法:像“%”++{param}++“%”,它不需要在param中转义%。关于注入:只要param值没有与查询连接,然后被解析和执行,而是作为参数绑定,它就应该可以了。@blackwizard您的方法对我有用。简单地说,数据库引擎在使用LIKE filter evalues表达式之前。我的解决方案对我来说不清楚:。据它所知,value='%'+param+'%'中的param引用外部变量?
...
<bind name="param" value="'%' + param + '%'" />
...
= SomeColumn LIKE #{param}