欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

關于mybatis使用${}時sql注入的問題

 更新時間:2021年12月15日 16:57:57   作者:ZS-Oliver  
這篇文章主要介紹了關于mybatis使用${}時sql注入的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

mybatis使用${}時sql注入的問題

最近在上線項目的時候,代碼審查沒有通過,提示有sql注入的風險。

ORDER BY ${orderBy}

很簡單的一個排序字段,但是因為使用 ${} 占位符的原因,有sql注入的風險,相信大家平時也經常會使用這個占位符,不知道有沒有考慮sql注入的問題,下面簡單介紹下 #{} 和 ${} 的區(qū)別以及為什么使用 ${} 會有sql注入的問題。

區(qū)別

  • #{}是一個參數(shù)占位符,對于String類型會自動加上"",其他類型不加。由于Mybatis采用預編譯,其后的參數(shù)不會再進行SQL編譯,所以一定程度上防止SQL注入。
  • ${}是一個簡單的String替換,字符串是什么,解析就是什么。
  • 類如order by。假如前端傳的參數(shù)是id(假設id是String類型),對于order by #{id},對應的sql語句就是 order by “id”;對于order by ${id},對應的sql語句則是order by id。這種情況,當用戶傳參為id && 1=1 的時候,就會產生難以預計的后果。

解決方法

  • 在原實體類里加入一個map
 public Map<String,String> indexMap=new HashMap<String,String>(){
        {
            put("spaceId","space_id"); // key為前端傳的值,value為數(shù)據(jù)庫對應的列值
            put("optTime","opt_time");
        }
    };
  • 當傳參時,判斷參數(shù)是否在map的key中,如果存在的話,就把對應的value作為排序的依賴條件。
if(paramOptLog.getOrderBy()!=null &&Strings.isNullOrEmpty(paramOptLog.getOrderBy())){
            OptLog optLog=new OptLog();
            paramOptLog.setOrderBy(optLog.indexMap.getOrDefault(paramOptLog.getOrderBy(), "id"));
        }
        List<OptLog> list = optLogMapper.query4Page(paramOptLog);
 }
  • 總結就是通過映射,由程序員來決定 ${} 傳的參數(shù),即將動態(tài)sql轉成靜態(tài)sql的方式可以解決這個問題,這樣在實際調用的時候就不會有sql注入的風險了。

mybatis sql注入問題之$與#

在mybatis中使用$符號

不會進行預編譯,會被sql注入

注入方式如下:

密碼隨便輸一個就可以通過驗證,只要用戶名正確即可。

這樣輸入后查詢語句在數(shù)據(jù)庫中如下:

select id,username,password from userLogin where username='admin' OR 1=1 and password='23'

sql解釋:AND優(yōu)先級高于OR 首先判斷后面1=1 and password='23'為false,然后判斷前面username='admin'為true中間

連接為OR即最后為true OR false 最后還是為true,就直接通過驗證,能夠正常登陸admin用戶。

在mybatis中使用#符號

這樣會進行預編譯,能夠防止sql注入。sql注入只有在編譯時才有效,而預編譯的時候是用個?代替參數(shù),真正執(zhí)行時才把參數(shù)替換?。

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Spring的IOC控制反轉詳解

    Spring的IOC控制反轉詳解

    這篇文章主要為大家介紹了Spring的IOC控制反轉,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助<BR>
    2022-01-01
  • Java算法實現(xiàn)楊輝三角的講解

    Java算法實現(xiàn)楊輝三角的講解

    今天小編就為大家分享一篇關于Java算法實現(xiàn)楊輝三角的講解,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • Spring根據(jù)XML配置文件 p名稱空間注入屬性的實例

    Spring根據(jù)XML配置文件 p名稱空間注入屬性的實例

    下面小編就為大家分享一篇Spring根據(jù)XML配置文件 p名稱空間注入屬性的實例,具有很好的參考價值。希望對大家有所幫助
    2017-11-11
  • IntelliJ IDEA 構建maven多模塊工程項目(詳細多圖)

    IntelliJ IDEA 構建maven多模塊工程項目(詳細多圖)

    這篇文章主要介紹了IntelliJ IDEA 構建maven多模塊工程項目(詳細多圖),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-06-06
  • SpringBoot中請求參數(shù)綁定及使用詳解

    SpringBoot中請求參數(shù)綁定及使用詳解

    這篇文章主要介紹了SpringBoot中請求參數(shù)綁定及使用詳解,在Web應用程序中,請求參數(shù)綁定是非常重要的操作,Spring?Boot框架使得請求參數(shù)綁定變得非常簡單,通過使用注解和預定義的類可以輕松地實現(xiàn)此操作,需要的朋友可以參考下
    2023-08-08
  • SpringBoot中@ComponentScan的使用詳解

    SpringBoot中@ComponentScan的使用詳解

    這篇文章主要介紹了SpringBoot中@ComponentScan的使用詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • 詳解mybatis流式查詢與分頁插件

    詳解mybatis流式查詢與分頁插件

    這篇文章主要介紹了mybatis流式查詢與分頁插件,本文通過實例代碼給大家講解的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-11-11
  • JavaWeb實現(xiàn)Session跨頁面?zhèn)鬟f數(shù)據(jù)

    JavaWeb實現(xiàn)Session跨頁面?zhèn)鬟f數(shù)據(jù)

    本文主要介紹了 JavaWeb實現(xiàn)Session跨頁面?zhèn)鬟f數(shù)據(jù),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-07-07
  • java枚舉enum,根據(jù)value值獲取key鍵的操作

    java枚舉enum,根據(jù)value值獲取key鍵的操作

    這篇文章主要介紹了java枚舉enum,根據(jù)value值獲取key鍵的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • SpringBoot開發(fā)詳解之Controller接收參數(shù)及參數(shù)校驗

    SpringBoot開發(fā)詳解之Controller接收參數(shù)及參數(shù)校驗

    數(shù)據(jù)校驗是為了使系統(tǒng)更完整,數(shù)據(jù)更精確,同時也有利于維護數(shù)據(jù)的安全性,下面這篇文章主要給大家介紹了關于SpringBoot開發(fā)詳解之Controller接收參數(shù)及參數(shù)校驗的相關資料,需要的朋友可以參考下
    2022-03-03

最新評論