審查要素,mybatis審查要點

 2023-10-06 阅读 27 评论 0

摘要:1.where條件遺漏情況 <select id="findActiveBlogLike" resultType="Blog">SELECT * FROM BLOG <where> <if test="state != null">state = #{state}</if> <if test="title != null"

1.where條件遺漏情況

<select id="findActiveBlogLike" resultType="Blog">SELECT * FROM BLOG <where> <if test="state != null">state = #{state}</if> <if test="title != null">AND title like #{title}</if></where>
</select>遺漏了state != null &&title != null的情況,導致全表查詢,甚至會導致內存泄露。
可以采用下面的方法將別的情況寫在otherwise中,或者在otherwise中寫 1=2。
<choose><when test="processStatus != null &amp;&amp; processStatus != '' &amp;&amp; processStatus != '-110'">and process_status = #{processStatus,jdbcType=VARCHAR} </when><otherwise>and process_status != 1</otherwise></choose>

2.對特殊符號的處理

下面的這些符號大于號、小于號、不等號、&、單引號和雙引號在Mybatis的xml文件中不能有效識別,如果直接這樣寫是有問題,會導致文件編譯出錯。> < <>  & ' " 兩種辦法來解決
第一種是把這些符號進行轉義:&gt;          > &lt;           < &lt;&gt;   <> &amp;      &&apos;      ' &quot;      " 
左邊的就是轉義的字符表示,用這些就能走在xml文件中正確使用步驟一種不能正常使用的特殊符號了。另外一種解決的方式:
<![CDATA[ >= ]]>
來表示特殊符號,可以把整個sql語句寫在<![CDATA[  ]]>中,這樣這些特殊符號就可以正常編譯了

3.if判斷注意點

注意:下面這種寫法只適用于 id 類型為字符串.<if test="id != null and id != '' ">id = #{id}</if>
如果id類型為int 當id=0時 這個判斷不會進入.

審查要素、4.編寫mybatis的映射語句時,盡量采用“#{xxx}”這樣的格式來避免sql注入,不要使用“${xxx}”

1.采用“#{xxx}”這樣的格式的sql會采用預編譯的形式,用?來占位<select id="getBlogById" resultType="Blog"parameterType=”int”>
select id,title,author,content
from blog where id=#{id}
</select>最后會編譯成
selectid,title,author,content from blog where id = ?
這樣在執行的時候 ,再將具體的參數注入進去,防止sql注入。2.采用“${xxx}”這樣的格式的sql,在編譯階段就回將參數帶入
<select id="orderBlog" resultType="Blog"parameterType=”map”>
select id,title,author,content
from blog order by ${orderParam}
</select>
最后編譯形成的sql為
select id,title,author,content fromblog order by id
這樣就可能會sql注入。因此在必須需要使用 ${xxx}的形式的時候(需要用此來動態創建表明和列名的時候),在代碼層面來做手工過濾(不能有空格和and or等關鍵詞,只能由26個字母組成等)。

轉載于:https://www.cnblogs.com/shibazijiang/p/5568715.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/5/119520.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息