码迷,mamicode.com
首页 > 数据库 > 详细

MyBatis如何防止SQL注入

时间:2018-05-29 10:21:05      阅读:199      评论:0      收藏:0      [点我收藏+]

标签:sequence   art   防止   cin   lsp   mybatis   目标   concat   nbsp   

SQL注入

什么是SQL注入呢?首先SQL注入是一种攻击手段,一种使用构造恶意的SQL语句,欺骗服务器执行SQL命令,让后台的数据库去解析,从而达到入侵目标网络,获取敏感信息的攻击手段。

MyBatis如何防止SQL注入

SQL中#和$区别

# $
相当于对数据加上双引号 相当于直接显示数据
很大程度上防止SQL注入 无法防止SQL注入
#{xxx},使用的是PreparedStatement,会有类型转换,比较安全 ${xxx},使用字符串拼接,容易SQL注入

 简单的说就是#{}是经过预编译的,是安全的,${}是未经过预编译的,仅仅是取变量的值,是非安全的,存在SQL注入。

例子

 1 <select id="selectBackGoodsDetail" resultType="java.util.Map">
 2     SELECT sum(a.item_num) backGoodsNum,a.item_price backGoodsPrice,
 3     sum(a.item_num * a.item_price) backGoodsSumPrice,
 4     b.barcode,b.name itemName,b.weight,c.name itemCategoryName
 5     FROM back_goods_detail a
 6     LEFT JOIN item b ON a.item_id=b.id
 7     LEFT JOIN item_category c ON b.item_category_id =c.id
 8     <where>
 9         <if test="backGoodsId!=null">
10             a.back_goods_id = #{backGoodsId}
11         </if>
12         <if test="itemCategoryId!=null">
13             AND b.item_category_id = #{itemCategoryId}
14         </if>
15         <if test="searchKey!= null">
16             AND (b.sequence LIKE CONCAT(‘%‘, #{searchKey}, ‘%‘)
17             OR b.name LIKE CONCAT(‘%‘, #{searchKey}, ‘%‘)
18             OR b.barcode LIKE CONCAT(‘%‘,#{searchKey},‘%‘))
19         </if>
20     </where>
21     GROUP BY a.item_id
22     LIMIT #{pageStart},#{pageNum}
23 </select>

MyBatis如何防止SQL注入

标签:sequence   art   防止   cin   lsp   mybatis   目标   concat   nbsp   

原文地址:https://www.cnblogs.com/PreachChen/p/9103278.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!