mybatis审查要点

1.where条件遗漏情况



 遗漏了state != null &&title != null的情况,导致全表查询,甚至会导致内存泄露。
可以采用下面的方法将别的情况写在otherwise中,或者在otherwise中写 1=2。

        
           and process_status = #{processStatus,jdbcType=VARCHAR} 
        
        
            and process_status != 1
        
    

2.对特殊符号的处理

下面的这些符号大于号、小于号、不等号、&、单引号和双引号在Mybatis的xml文件中不能有效识别,如果直接这样写是有问题,会导致文件编译出错。
 > < <>  & ' " 

两种办法来解决
第一种是把这些符号进行转义:
 >          > 
 <           < 
 <>   <> 
 &      &
 '      ' 
 "      " 
左边的就是转义的字符表示,用这些就能走在xml文件中正确使用步骤一种不能正常使用的特殊符号了。

另外一种解决的方式:
= ]]>
来表示特殊符号,可以把整个sql语句写在中,这样这些特殊符号就可以正常编译了

3.if判断注意点

注意:下面这种写法只适用于 id 类型为字符串.
  
  id = #{id}
  
如果id类型为int 当id=0时 这个判断不会进入.

4.编写mybatis的映射语句时,尽量采用“#{xxx}”这样的格式来避免sql注入,不要使用“${xxx}”

1.采用“#{xxx}”这样的格式的sql会采用预编译的形式,用?来占位



最后会编译成
selectid,title,author,content from blog where id = ?
这样在执行的时候 ,再将具体的参数注入进去,防止sql注入。

2.采用“${xxx}”这样的格式的sql,在编译阶段就回将参数带入

最后编译形成的sql为
select id,title,author,content fromblog order by id
这样就可能会sql注入。

因此在必须需要使用 ${xxx}的形式的时候(需要用此来动态创建表明和列名的时候),在代码层面来做手工过滤(不能有空格和and or等关键词,只能由26个字母组成等)。

你可能感兴趣的:(mybatis审查要点)