天道不一定酬所有勤
但是,天道只酬勤

天津11选5星期几开奖:ibatis防止sql注入

開發十年,就只剩下這套架構體系了??!

天津11选5蛋托玩法 www.ijudhr.com.cn 之前在ibatis直接執行已有sql語句中記錄了如何直接執行sql語句。

想要執行這樣一個語句,根據用戶輸入的條件,查詢分數大于(小于、等于、大于等于、小于等于)某分數的應用的信息,但是查詢的條件(大于、小于等)也是需要用戶傳進來的符號,所以代碼這樣寫:

<select id="selectAppNames" parameterClass="java.util.Map" resultClass="measureResultDO">
        select * from apaas_measure_result WHERE 1 = 1
        <dynamic>
             <isNotNull property="nodeId" prepend="and">
                 node_id=#nodeId#
             </isNotNull>
             <isNotNull property="symbol" prepend="and">
               <isNotNull property="numeric">
                   score $symbol$ #numeric#
               </isNotNull>
             </isNotNull>
        </dynamic>
    </select>

但是在ibatis的SQLMAP文件中使用$value$引入變量存在SQLInjection漏洞。
所以,將代碼改成如下:

<select id="selectAppNames" parameterClass="java.util.Map" resultClass="measureResultDO">
        select * from apaas_measure_result WHERE 1 = 1
        <dynamic>
             <isNotNull property="nodeId" prepend="and">
                 node_id=#nodeId#
             </isNotNull>
             <isNotNull property="symbol" prepend="and">
               <isNotNull property="numeric">
                   score $symbol:SQLKEYWORD$ #numeric#
               </isNotNull>
             </isNotNull>
        </dynamic>
    </select>

基本規則

用戶使用的sql代碼中能用#name#代替$name$的盡量用#name#替換.sql代碼中不應當出現$符合的變量.($引入的變量會導致sql注入的風險)
以下說明order by和sort 需要輸入動態參數時的處理方式

order by e.g.

select TABLE_NAME,TABLESPACE_NAME from user_tables order by $orderByColumn$ .

其中orderByColumn是數據庫中的字段. 對這種元數據的請使用:$orderByColumn:METADATA$替換$orderByColumn$.

sort e.g.

select TABLE_NAME,TABLESPACE_NAME from user_tables order by TABLE_NAME $ordertype$

其中ordertype為用戶輸入的ASC,DESC.對這種關鍵字請使用 $ordertype:SQLKEYWORD$替換 $ordertype$ .

(全文完) 歡迎關注『Java之道』微信公眾號
贊(2)
如未加特殊說明,此網站文章均為原創,轉載必須注明出處。天津11选5蛋托玩法 » ibatis防止sql注入
分享到: 更多 (0)

評論 搶沙發

  • 昵稱 (必填)
  • 郵箱 (必填)
  • 網址

HollisChuang's Blog

聯系我關于我