Mybatis预防SQL注入

简介: Mybatis预防SQL注入
+关注继续查看

一、Sql取值的两种形式


1.#{} - sql预编译取值

2.${} 直接字符串替换取值


二、使用方法



#{}使用预编译的方式,我们可以防止sql注入,我们平时使用的时候尽量使用这个,但是${}可以我们可以进行sql语句查询的拼接。


在这里解释一下什么是sql注入,就是黑客在搜索框输入与sql语句有关的字符串,后台接收进行数据查询,出现数据泄露的情况。

使用方法如下图:

Java代码,注意order使用

@Test
    public void testFindByTitle(){
        SqlSession session = null;
        //openSession创建一个新的SqlSession对象,SqlSession提供了增删改查的方法调用
        try {
            session = sqlSessionFactory.openSession();
            Map param = new HashMap();
            param.put("title", "'' or 1 =1 or title = '【德国】爱他美婴幼儿配方奶粉1段800g*2罐 铂金版'");
            param.put("order", " order by title desc");
            List<Goods> list = session.selectList("goods.findByTitle" , param);
            for (Goods goods : list) {
                System.out.println(goods.getTitle() + "-" + goods.getCurrentPrice());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            if (session != null) {
                //将Connection归还到连接池供其他Session重用
                session.close();
            }
        }
    }


xml文件中sql语句

<!--
    SQL注入
    select * from t_goods
    where title = '' or 1 =1 or title = '【德国】爱他美婴幼儿配方奶粉1段800g*2罐 铂金版'
    ${}如无必要,不要使用
    #{}预编译传值,使用预编译传值可以预防SQL注入
    select * from t_goods
    where title = "'' or 1 =1 or title = '【德国】爱他美婴幼儿配方奶粉1段800g*2罐 铂金版'"
    -->
    <select id="findByTitle" parameterType="java.util.Map" resultType="com.itlaoqi.mybatis.entity.Goods">
        select * from t_goods
        where title = #{title}
        ${order}
    </select>




相关文章
|
5天前
|
SQL XML Java
【MyBatis】动态SQL和mybatis分页的运用
如果我们的前台没有传参,比如没有传入我们的name值,name就会把字段值改为null,这就违背了我们编码的初衷。许多人会使用类似于where 1 = 1来作为前缀,在代码中会用if,再用and进行一个sql拼接。
|
7天前
|
SQL Java 数据库连接
MyBatis动态SQL:打造灵活可变的数据库操作
MyBatis动态SQL:打造灵活可变的数据库操作
|
9天前
|
SQL Java 数据库连接
Mybatis中实现动态SQL
Mybatis中实现动态SQL
16 0
|
13天前
|
SQL 缓存 Java
MyBatis核心源码深度剖析SQL执行过程
MyBatis核心源码深度剖析SQL执行过程
15 0
|
17天前
|
SQL XML Java
MyBatis进阶:告别SQL注入!MyBatis分页与特殊字符的正确使用方式
MyBatis进阶:告别SQL注入!MyBatis分页与特殊字符的正确使用方式
20 0
|
17天前
|
SQL Java 数据库连接
MyBatis进阶:掌握MyBatis动态SQL与模糊查询、结果映射,让你在面试中脱颖而出!!
MyBatis进阶:掌握MyBatis动态SQL与模糊查询、结果映射,让你在面试中脱颖而出!!
18 0
|
18天前
|
SQL XML Java
MyBatis的场景应用(动态SQL、模糊查询及映射结果)附(Mybatis中#和$的区别)2
MyBatis的场景应用(动态SQL、模糊查询及映射结果)附(Mybatis中#和$的区别)2
13 0
|
18天前
|
SQL Java 数据库连接
MyBatis的场景应用(动态SQL、模糊查询及映射结果)附(Mybatis中#和$的区别)1
MyBatis的场景应用(动态SQL、模糊查询及映射结果)附(Mybatis中#和$的区别)1
20 0
|
18天前
|
SQL Java 数据库连接
【MyBatis】动态SQL > 重点:${...}和#{...}与resultMap和resultType的区别
【MyBatis】动态SQL > 重点:${...}和#{...}与resultMap和resultType的区别
10 0
|
28天前
|
SQL Java 数据库连接
Mybatis sql参数自动填充
简述idea插件实现Mybatis sql参数自动填充
推荐文章
更多