MyBatis如何防止SQL注入
SQL注入
什么是SQL注入呢?首先SQL注入是一种攻击手段,一种使用构造恶意的SQL语句,欺骗服务器执行SQL命令,让后台的数据库去解析,从而达到入侵目标网络,获取敏感信息的攻击手段。
MyBatis如何防止SQL注入
SQL中#和$区别
# | $ |
相当于对数据加上双引号 | 相当于直接显示数据 |
很大程度上防止SQL注入 | 无法防止SQL注入 |
#{xxx},使用的是PreparedStatement,会有类型转换,比较安全 | ${xxx},使用字符串拼接,容易SQL注入 |
简单的说就是#{}是经过预编译的,是安全的,${}是未经过预编译的,仅仅是取变量的值,是非安全的,存在SQL注入。
例子
SELECT sum(a.item_num) backGoodsNum,a.item_price backGoodsPrice, sum(a.item_num * a.item_price) backGoodsSumPrice, b.barcode,b.name itemName,b.weight,c.name itemCategoryName FROM back_goods_detail a LEFT JOIN item b ON a.item_id=b.id LEFT JOIN item_category c ON b.item_category_id =c.id a.back_goods_id = #{backGoodsId} AND b.item_category_id = #{itemCategoryId} AND (b.sequence LIKE CONCAT('%', #{searchKey}, '%') OR b.name LIKE CONCAT('%', #{searchKey}, '%') OR b.barcode LIKE CONCAT('%',#{searchKey},'%')) GROUP BY a.item_id LIMIT #{pageStart},#{pageNum}