国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

如何設(shè)計(jì)一個(gè)安全的API接口詳解

這篇具有很好參考價(jià)值的文章主要介紹了如何設(shè)計(jì)一個(gè)安全的API接口詳解。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

前言

在日常開發(fā)中,總會(huì)接觸到各種接口。前后端數(shù)據(jù)傳輸接口,第三方業(yè)務(wù)平臺(tái)接口。一個(gè)平臺(tái)的前后端數(shù)據(jù)傳輸接口一般都會(huì)在內(nèi)網(wǎng)環(huán)境下通信,而且會(huì)使用安全框架,所以安全性可以得到很好的保護(hù)。這篇文章重點(diǎn)討論一下提供給第三方平臺(tái)的業(yè)務(wù)接口應(yīng)當(dāng)如何設(shè)計(jì)?我們應(yīng)該考慮哪些問題?

api接口安全設(shè)計(jì),軟件測試,技術(shù)分享,安全,前端

主要從以上三個(gè)方面來設(shè)計(jì)一個(gè)安全的API接口。

一?安全性問題

安全性問題是一個(gè)接口必須要保證的規(guī)范。如果接口保證不了安全性,那么你的接口相當(dāng)于直接暴露在公網(wǎng)環(huán)境中任人蹂躪。

1.1 調(diào)用接口的先決條件-token

獲取token一般會(huì)涉及到幾個(gè)參數(shù)appid,appkey,timestamp,nonce,sign。我們通過以上幾個(gè)參數(shù)來獲取調(diào)用系統(tǒng)的憑證。

appid和appkey可以直接通過平臺(tái)線上申請,也可以線下直接頒發(fā)。appid是全局唯一的,每個(gè)appid將對應(yīng)一個(gè)客戶,appkey需要高度保密。

timestamp是時(shí)間戳,使用系統(tǒng)當(dāng)前的unix時(shí)間戳。時(shí)間戳的目的就是為了減輕DOS攻擊。防止請求被攔截后一直嘗試請求接口。服務(wù)器端設(shè)置時(shí)間戳閥值,如果請求時(shí)間戳和服務(wù)器時(shí)間超過閥值,則響應(yīng)失敗。

nonce是隨機(jī)值。隨機(jī)值主要是為了增加sign的多變性,也可以保護(hù)接口的冪等性,相鄰的兩次請求nonce不允許重復(fù),如果重復(fù)則認(rèn)為是重復(fù)提交,響應(yīng)失敗。

sign是參數(shù)簽名,將appkey,timestamp,nonce拼接起來進(jìn)行md5加密(當(dāng)然使用其他方式進(jìn)行不可逆加密也沒問題)。

token,使用參數(shù)appid,timestamp,nonce,sign來獲取token,作為系統(tǒng)調(diào)用的唯一憑證。token可以設(shè)置一次有效(這樣安全性更高),也可以設(shè)置時(shí)效性,這里推薦設(shè)置時(shí)效性。如果一次有效的話這個(gè)接口的請求頻率可能會(huì)很高。token推薦加到請求頭上,這樣可以跟業(yè)務(wù)參數(shù)完全區(qū)分開來。

1.2 使用POST作為接口請求方式

一般調(diào)用接口最常用的兩種方式就是GET和POST。兩者的區(qū)別也很明顯,GET請求會(huì)將參數(shù)暴露在瀏覽器URL中,而且對長度也有限制。為了更高的安全性,所有接口都采用POST方式請求。

1.3 客戶端IP白名單

ip白名單是指將接口的訪問權(quán)限對部分ip進(jìn)行開放。這樣就能避免其他ip進(jìn)行訪問攻擊,設(shè)置ip白名單比較麻煩的一點(diǎn)就是當(dāng)你的客戶端進(jìn)行遷移后,就需要重新聯(lián)系服務(wù)提供者添加新的ip白名單。設(shè)置ip白名單的方式很多,除了傳統(tǒng)的防火墻之外,spring cloud alibaba提供的組件sentinel也支持白名單設(shè)置。為了降低api的復(fù)雜度,推薦使用防火墻規(guī)則進(jìn)行白名單設(shè)置。

1.4 單個(gè)接口針對ip限流

限流是為了更好的維護(hù)系統(tǒng)穩(wěn)定性。使用redis進(jìn)行接口調(diào)用次數(shù)統(tǒng)計(jì),ip+接口地址作為key,訪問次數(shù)作為value,每次請求value+1,設(shè)置過期時(shí)長來限制接口的調(diào)用頻率。

1.5 記錄接口請求日志

使用aop全局記錄請求日志,快速定位異常請求位置,排查問題原因。

1.6 敏感數(shù)據(jù)脫敏

在接口調(diào)用過程中,可能會(huì)涉及到訂單號(hào)等敏感數(shù)據(jù),這類數(shù)據(jù)通常需要脫敏處理,最常用的方式就是加密。加密方式使用安全性比較高的RSA非對稱加密。非對稱加密算法有兩個(gè)密鑰,這兩個(gè)密鑰完全不同但又完全匹配。只有使用匹配的一對公鑰和私鑰,才能完成對明文的加密和解密過程。

二 冪等性問題

冪等性是指任意多次請求的執(zhí)行結(jié)果和一次請求的執(zhí)行結(jié)果所產(chǎn)生的影響相同。說的直白一點(diǎn)就是查詢操作無論查詢多少次都不會(huì)影響數(shù)據(jù)本身,因此查詢操作本身就是冪等的。但是新增操作,每執(zhí)行一次數(shù)據(jù)庫就會(huì)發(fā)生變化,所以它是非冪等的。

冪等問題的解決有很多思路,這里講一種比較嚴(yán)謹(jǐn)?shù)摹L峁┮粋€(gè)生成隨機(jī)數(shù)的接口,隨機(jī)數(shù)全局唯一。調(diào)用接口的時(shí)候帶入隨機(jī)數(shù)。第一次調(diào)用,業(yè)務(wù)處理成功后,將隨機(jī)數(shù)作為key,操作結(jié)果作為value,存入redis,同時(shí)設(shè)置過期時(shí)長。第二次調(diào)用,查詢r(jià)edis,如果key存在,則證明是重復(fù)提交,直接返回錯(cuò)誤。

三 數(shù)據(jù)規(guī)范問題

3.1 版本控制

一套成熟的API文檔,一旦發(fā)布是不允許隨意修改接口的。這時(shí)候如果想新增或者修改接口,就需要加入版本控制,版本號(hào)可以是整數(shù)類型,也可以是浮點(diǎn)數(shù)類型。一般接口地址都會(huì)帶上版本號(hào),http://ip:port//v1/list。

3.2 響應(yīng)狀態(tài)碼規(guī)范

一個(gè)牛逼的API,還需要提供簡單明了的響應(yīng)值,根據(jù)狀態(tài)碼就可以大概知道問題所在。我們采用http的狀態(tài)碼進(jìn)行數(shù)據(jù)封裝,例如200表示請求成功,4xx表示客戶端錯(cuò)誤,5xx表示服務(wù)器內(nèi)部發(fā)生錯(cuò)誤。狀態(tài)碼設(shè)計(jì)參考如下:

分類 描述
1xx 信息,服務(wù)器收到請求,需要請求者繼續(xù)執(zhí)行操作
2xx 成功
3xx 重定向,需要進(jìn)一步的操作以完成請求
4xx 客戶端錯(cuò)誤,請求包含語法錯(cuò)誤或無法完成請求
5xx 服務(wù)端錯(cuò)誤

狀態(tài)碼枚舉類:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

public?enum?CodeEnum {

????// 根據(jù)業(yè)務(wù)需求進(jìn)行添加

????SUCCESS(200,"處理成功"),

????ERROR_PATH(404,"請求地址錯(cuò)誤"),

????ERROR_SERVER(505,"服務(wù)器內(nèi)部發(fā)生錯(cuò)誤");

?????

????private?int?code;

????private?String message;

?????

????CodeEnum(int?code, String message) {

????????this.code = code;

????????this.message = message;

????}

????public?int?getCode() {

????????return?code;

????}

????public?void?setCode(int?code) {

????????this.code = code;

????}

????public?String getMessage() {

????????return?message;

????}

????public?void?setMessage(String message) {

????????this.message = message;

????}

}

3.3 統(tǒng)一響應(yīng)數(shù)據(jù)格式

為了方便給客戶端響應(yīng),響應(yīng)數(shù)據(jù)會(huì)包含三個(gè)屬性,狀態(tài)碼(code),信息描述(message),響應(yīng)數(shù)據(jù)(data)??蛻舳烁鶕?jù)狀態(tài)碼及信息描述可快速知道接口,如果狀態(tài)碼返回成功,再開始處理數(shù)據(jù)。

響應(yīng)結(jié)果定義及常用方法:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

public?class?R?implements?Serializable {

????private?static?final?long?serialVersionUID = 793034041048451317L;

????private?int?code;

????private?String message;

????private?Object data =?null;

????public?int?getCode() {

????????return?code;

????}

????public?void?setCode(int?code) {

????????this.code = code;

????}

????public?String getMessage() {

????????return?message;

????}

????public?void?setMessage(String message) {

????????this.message = message;

????}

????public?Object getData() {

????????return?data;

????}

????/**

?????* 放入響應(yīng)枚舉

?????*/

????public?R fillCode(CodeEnum codeEnum){

????????this.setCode(codeEnum.getCode());

????????this.setMessage(codeEnum.getMessage());

????????return?this;

????}

????/**

?????* 放入響應(yīng)碼及信息

?????*/

????public?R fillCode(int?code, String message){

????????this.setCode(code);

????????this.setMessage(message);

????????return?this;

????}

????/**

?????* 處理成功,放入自定義業(yè)務(wù)數(shù)據(jù)集合

?????*/

????public?R fillData(Object data) {

????????this.setCode(CodeEnum.SUCCESS.getCode());

????????this.setMessage(CodeEnum.SUCCESS.getMessage());

????????this.data = data;

????????return?this;

????}

}

總結(jié)

本篇文章從安全性、冪等性、數(shù)據(jù)規(guī)范等方面討論了API設(shè)計(jì)規(guī)范。除此之外,一個(gè)好的API還少不了一個(gè)優(yōu)秀的接口文檔。接口文檔的可讀性非常重要,雖然很多程序員都不喜歡寫文檔,而且不喜歡別人不寫文檔。為了不增加程序員的壓力,推薦使用swagger或其他接口管理工具,通過簡單配置,就可以在開發(fā)中測試接口的連通性,上線后也可以生成離線文檔用于管理API。

?

總結(jié):

感謝每一個(gè)認(rèn)真閱讀我文章的人?。。?/strong>

作為一位過來人也是希望大家少走一些彎路,如果你不想再體驗(yàn)一次學(xué)習(xí)時(shí)找不到資料,沒人解答問題,堅(jiān)持幾天便放棄的感受的話,在這里我給大家分享一些自動(dòng)化測試的學(xué)習(xí)資源,希望能給你前進(jìn)的路上帶來幫助。

api接口安全設(shè)計(jì),軟件測試,技術(shù)分享,安全,前端

  1. 文檔獲取方式:

  2. 加入我的軟件測試交流群:680748947免費(fèi)獲取~(同行大佬一起學(xué)術(shù)交流,每晚都有大佬直播分享技術(shù)知識(shí)點(diǎn))

這份文檔,對于想從事【軟件測試】的朋友來說應(yīng)該是最全面最完整的備戰(zhàn)倉庫,這個(gè)倉庫也陪伴我走過了最艱難的路程,希望也能幫助到你!

以上均可以分享,只需要你搜索vx公眾號(hào):程序員雨果,即可免費(fèi)領(lǐng)取文章來源地址http://www.zghlxwxcb.cn/news/detail-850133.html

到了這里,關(guān)于如何設(shè)計(jì)一個(gè)安全的API接口詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 如何做一個(gè)api接口?

    如何做一個(gè)api接口?:我們知道API其實(shí)就是應(yīng)用程序編程接口,可以把它理解為是一種通道,用來和不同軟件系統(tǒng)間進(jìn)行通信,本質(zhì)上它是預(yù)先定義的函數(shù):-api,接口 1 我們知道API其實(shí)就是應(yīng)用程序編程接口,可以把它理解為是一種通道,用來和不同軟件系統(tǒng)間進(jìn)行通信,本質(zhì)

    2023年04月24日
    瀏覽(21)
  • 如何做一個(gè)api接口

    ? ? ? ? 程序員是公司里的技術(shù)崗位,是產(chǎn)品經(jīng)理最親密的伙伴。但是程序員可以理解產(chǎn)品經(jīng)理的工作,產(chǎn)品經(jīng)理卻不一定理解程序員的工作,所以經(jīng)常被無良程序員欺騙。從?api接口這個(gè)維度,分析API的概念以及為什么要了解它,避免PM們在實(shí)際工作中對代碼技術(shù)一無所知。

    2024年02月06日
    瀏覽(19)
  • API接口安全設(shè)計(jì)

    API接口安全設(shè)計(jì)

    HTTP接口是互聯(lián)網(wǎng)各系統(tǒng)之間對接的重要方式之一,使用HTTP接口開發(fā)和調(diào)用都很方便,也是被大量采用的方式,它可以讓不同系統(tǒng)之間實(shí)現(xiàn)數(shù)據(jù)的交換和共享。 由于HTTP接口開放在互聯(lián)網(wǎng)上,所以我們就需要有一定的安全措施來保證接口安全。 個(gè)人覺得安全措施大體來看主要

    2024年02月04日
    瀏覽(21)
  • API 接口怎樣設(shè)計(jì)才安全?

    設(shè)計(jì)安全的API接口是確保應(yīng)用程序和數(shù)據(jù)安全的重要方面之一。下面是一些設(shè)計(jì)安全的API接口的常見實(shí)踐: 使用適當(dāng)?shù)纳矸蒡?yàn)證機(jī)制,如OAuth、JWT或基本身份驗(yàn)證,以確保只有經(jīng)過身份驗(yàn)證的用戶可以訪問API。 實(shí)施授權(quán)機(jī)制,例如使用令牌或角色/權(quán)限來限制用戶對資源的訪

    2024年02月03日
    瀏覽(35)
  • Android開發(fā)規(guī)范:API接口安全設(shè)計(jì)規(guī)范

    Android開發(fā)規(guī)范:API接口安全設(shè)計(jì)規(guī)范

    書籍購買地址:京東 當(dāng)當(dāng) 天貓 API接口設(shè)計(jì)系列文章 Android開發(fā)規(guī)范:API接口安全設(shè)計(jì)規(guī)范 Android開發(fā)規(guī)范:API接口通用設(shè)計(jì)規(guī)范 文章目錄 防篡改 防重放 Https APP的數(shù)據(jù)來源就是API接口,所以API接口對于APP的意義來說不言而喻。 設(shè)計(jì)API接口最重要的考慮點(diǎn)就是安全機(jī)制。 我們

    2024年04月09日
    瀏覽(33)
  • 如何合理設(shè)計(jì)API接口?

    本規(guī)范僅適用于由服務(wù)器端發(fā)起調(diào)用請求、POST提交數(shù)據(jù)以及GET請求文本數(shù)據(jù)結(jié)果的API,統(tǒng)一采用UTF-8編碼規(guī)則,采用JSON格式響應(yīng)。 URL定義 API 服務(wù)接口應(yīng)提供REST風(fēng)格的HTTP(HTTPS) 接口: {protocol}://{domain}:{port}/{ app }/{controller}/{action}?{query} 變量 含義 示例 protocol 接口協(xié)議 HTTP、

    2024年02月11日
    瀏覽(24)
  • 如何保證API接口的安全性

    如何保證API接口的安全性

    API接口的安全性是非常重要的,以下是一些保證API接口安全性的措施: 用戶認(rèn)證、授權(quán):接口的調(diào)用者必須提供有效的身份認(rèn)證信息,包括用戶名、密碼、密鑰等,以保證接口的調(diào)用者的身份有效性。同時(shí),需要在接口的訪問權(quán)限上進(jìn)行嚴(yán)格控制,以確保只有經(jīng)過授權(quán)的用戶

    2024年02月11日
    瀏覽(27)
  • API接口的安全設(shè)計(jì)驗(yàn)證:ticket,簽名,時(shí)間戳

    API接口的安全設(shè)計(jì)驗(yàn)證:ticket,簽名,時(shí)間戳

    概述 與前端對接的API接口,如果被第三方抓包并進(jìn)行惡意篡改參數(shù),可能會(huì)導(dǎo)致數(shù)據(jù)泄露,甚至?xí)淮鄹臄?shù)據(jù),我主要圍繞時(shí)間戳,token,簽名三個(gè)部分來保證API接口的安全性 1.用戶成功登陸站點(diǎn)后,服務(wù)器會(huì)返回一個(gè)token,用戶的任何操作都必須帶了這個(gè)參數(shù),可以將這個(gè)

    2024年04月27日
    瀏覽(24)
  • API接口的安全設(shè)計(jì)驗(yàn)證:ticket,簽名,時(shí)間戳(1)

    API接口的安全設(shè)計(jì)驗(yàn)證:ticket,簽名,時(shí)間戳(1)

    result.put(“success”,false); result.put(“ticket”,“”); result.put(“code”,“999”); result.put(“message”,“用戶名和密碼不匹配”); return result; } if (personEntity.getLoginName().equals(username) personEntity.getPassword().equals(password)){ String ticket = UUID.randomUUID().toString(); ticket = ticket.replace(“-”,“”);

    2024年04月27日
    瀏覽(36)
  • 如何設(shè)計(jì) API 接口,實(shí)現(xiàn)統(tǒng)一格式返回?

    如何設(shè)計(jì) API 接口,實(shí)現(xiàn)統(tǒng)一格式返回?

    在移動(dòng)互聯(lián)網(wǎng),分布式,微服務(wù)盛行的今天,現(xiàn)在項(xiàng)目絕大部分都采用的微服務(wù)框架,前分離分離方式,(題外話:前重新的工作分配越來越明確,現(xiàn)在的前端都稱為大前端,技術(shù)棧以及生態(tài)圈都已經(jīng)非常成熟;以前官員人員瞧不起前端人員,那現(xiàn)在高層人員要重新認(rèn)識(shí)一下

    2024年02月12日
    瀏覽(16)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包