Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Mybatis-防止类似查询中的SQL注入_Java_Sql_Sql Server_Mybatis - Fatal编程技术网

Java Mybatis-防止类似查询中的SQL注入

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

我正在使用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超出 射程

我无法处理任何想法,但我发现:

...    
<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}