成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

API接口安全性設計思路

mikyou / 609人閱讀

在工作中經常遇見項目對接,那么該如何寫一個安全的接口供給對方調用呢???

1.公共接口,任何人都可以訪問調用
1.1.適合場景,公司后臺整合廣告管理,提供統(tǒng)一的接口返回給公司其他項目調用和郵件模板調用,這時候需要設計一個統(tǒng)一的接口,返回廣告的內容。還有天氣查詢等場景。

 @PostMapping("/syncInfo")  
 public Result syncInfo(@RequestParam(name = "data")String data){  
       if(!StringUtils.isNotBlank(data)){  
           return  new Result("失?。?,false,HttpCode.STATUS_104);  
       }  
       InfoVo infoVo = JSONObject.parseObject(data,InfoVo.class);  
       dealInfo(infoVo);  
       return  new Result("成功!",true, HttpCode.STATUS_200);  
 }

2.接口參數(shù)加密
2.1.適合場景,公司內部兩個項目組進行對接,為了防止接口被暴露和偽造訪問,這個時候需要對參數(shù)進行加密處理,防止接口被其他外部人員調用,一般采用desc或者aes對稱加密,約定好秘鑰進行對接。

@PostMapping("/syncInfo")  
public Result syncInfo(@RequestParam(name = "data")String data){  
    try {  
          if(!StringUtils.isNotBlank(data)){  
              return  new Result("失?。?,false,HttpCode.STATUS_104);  
          }  
          DES des = new DES("秘鑰".getBytes());  
          String j = des.decryptStr(data);  
          logger.debug("解碼前:" + data);  
          logger.debug("解碼后:" + j);  
          InfoVo infoVo = JSONObject.parseObject(j,InfoVo.class);  
          dealInfo(infoVo);  
          return  new Result("成功!",true, HttpCode.STATUS_200);  
      }catch (Exception e){  
            e.printStackTrace();  
            if(!StringUtils.isNotBlank(data)){  
                return  new Result("系統(tǒng)錯誤!",false,HttpCode.STATUS_105);  
            }  
      }  
}

3.接口時效性加密+接口參數(shù)加密
3.1.適合場景,內部接口加密過的數(shù)據(jù)鏈接被暴露,不斷有相同數(shù)據(jù)對接口進行訪問,這個適合需要對接口加入時間戳參數(shù),設計失效時間解決這個問題。

@PostMapping("/syncInfo")  
public Result syncInfo(@RequestParam(name = "data")String data){  
    try {  
          if(!StringUtils.isNotBlank(data)){  
              return  new Result("失敗!",false,HttpCode.STATUS_104);  
          }  
          DES des = new DES("秘鑰".getBytes());  
          String j = des.decryptStr(data);  
          logger.debug("解碼前:" + data);  
          logger.debug("解碼后:" + j);  
          InfoVo infoVo = JSONObject.parseObject(j,InfoVo.class);  
          if(AddSecondes(infoVo.getTime(),20) < new Date().getTime()){  
              return new Result("接口失效!",false,HttpCode.STATUS_100);  
          }  
          dealInfo(infoVo);  
          return new Result("成功!",true, HttpCode.STATUS_200);  
      }catch (Exception e){  
            e.printStackTrace();  
            if(!StringUtils.isNotBlank(data)){  
                return new Result("系統(tǒng)錯誤!",false,HttpCode.STATUS_105);  
            }  
      }  
  
}  

4.接口時效性+接口參數(shù)加密+不同來源的私鑰
4.1適合場景, 當接口秘鑰被泄露時,我們可以對不同的數(shù)據(jù)來源設置不同的私鑰,這樣即使接口秘鑰被泄露,沒有私鑰,依然不能對接口進行操作,而且可以記錄是哪個項目的秘鑰被泄露,快速定位出問題的來源,且不會影響其他項目調用。

@PostMapping("/syncInfo")  
public Result syncInfo(@RequestParam(name = "data")String data){  
    try {  
          if(!StringUtils.isNotBlank(data)){  
              return  new Result("失??!",false,HttpCode.STATUS_104);  
          }  
          DES des = new DES("基礎秘鑰".getBytes());  
          String j = des.decryptStr(data);  
          logger.debug("解碼前:" + data);  
          logger.debug("解碼后:" + j);  
          InfoVo infoVo = JSONObject.parseObject(j,InfoVo.class);  
          if(AddSecondes(infoVo.getTime(),20) < new Date().getTime()){  
              return  new Result("接口失效!",false,HttpCode.STATUS_100);  
          }  
          String sign = getSignByFrom(Info.getFrom());  
          logger.debug("來源秘鑰"+sign);  
          String k = des.decryptStr(Info.getData);  
          dealInfo(k);  
          return  new Result("成功!",true, HttpCode.STATUS_200);  
      }catch (Exception e){  
            e.printStackTrace();  
            if(!StringUtils.isNotBlank(data)){  
                return  new Result("系統(tǒng)錯誤!",false,HttpCode.STATUS_105);  
            }  
      }  
}  

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://systransis.cn/yun/71188.html

相關文章

  • Hybrid APP架構設計思路

    摘要:本文將從以下幾個方面闡述架構設計的一些經驗和思考。原文及討論請到通訊作為一種跨語言開發(fā)模式,通訊層是架構首先應該考慮和設計的,往后所有的邏輯都是基于通訊層展開。 關于Hybrid模式開發(fā)app的好處,網絡上已有很多文章闡述了,這里不展開。 本文將從以下幾個方面闡述Hybrid app架構設計的一些經驗和思考。 原文及討論請到 github issue 通訊 作為一種跨語言開發(fā)模式,通訊...

    hiyayiji 評論0 收藏0
  • 權限設計的雜談

    摘要:權限設計的雜談這篇文章的定位,不是宣傳某個框架,僅僅之是梳理一下有關權限方面的一些想法和最近項目中的一些探索過程。而這兩者的取舍則是有設計人員決定的。數(shù)據(jù)抽象原則最小特權劃分從某個程度上來說決定了控制的對象,而數(shù)據(jù)抽象原則是是決定了操作。 權限設計的雜談 這篇文章的定位,不是宣傳某個框架,僅僅之是梳理一下有關權限方面的一些想法和最近項目中的一些探索過程。我們主要想解決一下問題。 什么...

    yck 評論0 收藏0
  • Api項目設計攻略

    摘要:總結一下數(shù)據(jù)保護的技術點參數(shù)傳輸使用密文,可以使用對稱加密非對稱加密或者兩者的結合,比如請求就是屬于兩者結合的方式。安全性一些常用的安全問題都要考慮到,并且在項目框架底層進行防范,例如攻擊注入問題單用戶或者單的訪問頻率控制來進行防攻擊。 App所有數(shù)據(jù)都來源于服務器,App和服務器交互普遍是采用http請求接口的方式,那么在搭建和維護一個后端Api項目時候需要注意哪些問題呢? 1. 數(shù)...

    scq000 評論0 收藏0
  • 接口測試要測試什么?

    摘要:接口測試主要用于檢測外部系統(tǒng)與系統(tǒng)之間以及內部各個子系統(tǒng)之間的交互點。二接口測試用例設計接口測試的用例設計是關鍵,不能只是單純正常請求通過就算接口測試過了,要從業(yè)務功能性能等上去設計用例。 ...

    邱勇 評論0 收藏0
  • Java面試通關要點匯總集

    摘要:本文會以引出問題為主,后面有時間的話,筆者陸續(xù)會抽些重要的知識點進行詳細的剖析與解答。敬請關注服務端思維微信公眾號,獲取最新文章。 原文地址:梁桂釗的博客博客地址:http://blog.720ui.com 這里,筆者結合自己過往的面試經驗,整理了一些核心的知識清單,幫助讀者更好地回顧與復習 Java 服務端核心技術。本文會以引出問題為主,后面有時間的話,筆者陸續(xù)會抽些重要的知識點進...

    gougoujiang 評論0 收藏0

發(fā)表評論

0條評論

mikyou

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<