MyBatis防止SQL注入

public interface UserMapper{
 String getNameByUserId(@Param("userId") String userId);
}
当我们传入userId="34;drop table user;"后
 
<select id="getNameByUserId" resultType="String">
 SELECT name FROM user where id = #{userId}
</select>
select name from user where id = ?
 
<select id="getNameByUserId" resultType="String">
 SELECT name FROM user where id = ${userId}
</select>
select name from user where id = 34;drop table user;

#{}是经过预编译的,是安全的${}是未经过预编译的,仅仅是取变量的值,是非安全的,存在SQL注入。尽量采用“#{xxx}”这样的格式。若不得不使用“${xxx}”这样的参数,要手工地做好过滤工作,来防止sql注入攻击。涉及到动态表名和列名时,只能使用“${xxx}”这样的参数格式。所以,这样的参数需要我们在代码中手工进行处理来防止注入。

posted @ 2020-10-15 17:58  南方卖菜  阅读(179)  评论(0编辑  收藏  举报