MyBatis如何防止SQL注入


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>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM