當(dāng)前位置:首頁(yè) >  站長(zhǎng) >  編程技術(shù) >  正文

12 個(gè)設(shè)計(jì) API 的安全建議 不要等出事兒了捶胸頓足

 2020-10-26 12:09  來(lái)源: 博客園   我來(lái)投稿 撤稿糾錯(cuò)

  域名預(yù)訂/競(jìng)價(jià),好“米”不錯(cuò)過(guò)

雖然本質(zhì)上 API 就是拿來(lái)用的,但即便某個(gè) API 的使用者全是內(nèi)部人員,它還是可能會(huì)出現(xiàn)安全問(wèn)題。為了解決 API 安全問(wèn)題,在本文我們收集了一系列 API 的最佳實(shí)踐,希望你記住這些 Tips 日后在保護(hù) API/Web 服務(wù)安全和免受入侵時(shí),會(huì)幫助到你。

1、使用 HTTPS

現(xiàn)在的 Web 已經(jīng)不是之前那個(gè)年代,標(biāo)準(zhǔn)的 HTTP 滿足不了 Web 安全需求。而各大瀏覽器供應(yīng)商開(kāi)始標(biāo)記不使用安全層的 URL,你的 API 也可以考慮開(kāi)始動(dòng)手做這件事——用 HTTPS。HTTPS 采用傳輸層安全性協(xié)議(TLS)對(duì)傳輸進(jìn)行加密。這意味著 HTTPS 對(duì)客戶端和服務(wù)器之間的通信進(jìn)行加密。對(duì) API 而言,HTTPS 意味著從 API 發(fā)送的內(nèi)容是受第三方保護(hù)的,但更重要的是這意味著訪問(wèn)憑證是安全的。

2、認(rèn)證

說(shuō)到訪問(wèn)憑證,避免意外使用 API 的最直接的方法便是確保正確的身份驗(yàn)證。身份驗(yàn)證決定了你是否可訪問(wèn) API 及如何訪問(wèn)某個(gè) API,即便是對(duì)外開(kāi)放的免費(fèi) API 理論上也應(yīng)當(dāng)考慮采用身份驗(yàn)證策略以保證安全性。有了身份認(rèn)證,你可以限制或刪除濫用 API 的使用者,讓使用者在需要時(shí)重新設(shè)置憑證,從而保護(hù)他們的安全。了解更多有關(guān) API 身份驗(yàn)證的知識(shí)可以閱讀《三種最常見(jiàn)的認(rèn)證方法》。

3、授權(quán)

起到和身份驗(yàn)證類(lèi)似作用的是授權(quán)。身份驗(yàn)證和授權(quán)的區(qū)別在于,身份驗(yàn)證關(guān)注的是 API 的使用者是誰(shuí),而授權(quán)關(guān)注的是他們能夠訪問(wèn)的內(nèi)容。舉個(gè)例子,免費(fèi)計(jì)劃用戶可能被授權(quán)只能訪問(wèn)你所有 API 的某個(gè)子集。當(dāng)你想集成諸如社交登錄此類(lèi) API 時(shí),用戶授權(quán)可讓?xiě)?yīng)用從社交平臺(tái)讀取他們的配置文件數(shù)據(jù)。

4、安全 endpoints 和資源(對(duì)象級(jí)授權(quán))

一般來(lái)說(shuō),我們會(huì)通過(guò)授權(quán)來(lái)保護(hù) endpoint/endpoints,但更長(zhǎng)遠(yuǎn)來(lái)說(shuō),我們需要確保單個(gè)資源的安全。單個(gè)資源的安全可以防止錯(cuò)誤配置的 endpoint 級(jí)授權(quán)訪問(wèn)數(shù)據(jù)。此外,它還意味著 endpoint 本身不受用戶類(lèi)型的限制,而是由資源控制誰(shuí)能查看它,誰(shuí)不能查看它。(精確到 URL 的權(quán)限)

5、限速

一說(shuō)到安全,我們常會(huì)想到不適當(dāng)?shù)脑L問(wèn)。當(dāng)然,如何處理不適當(dāng)?shù)脑L問(wèn)對(duì)管理資源也很有用。限速是一種限制 API 使用的技術(shù)。它不僅在經(jīng)濟(jì)上保護(hù)資源,但也保證了服務(wù)器不會(huì)因某次大量的請(qǐng)求而超載。大多數(shù)限速的方法都基于時(shí)間的——一般會(huì)設(shè)置一個(gè)賬單周期來(lái)處理 API 總體使用情況,也會(huì)用“突發(fā)”方法來(lái)限制大量涌入的請(qǐng)求。如果你看到 429 HTTP 狀態(tài)代碼,說(shuō)明你正在被限速。

6、驗(yàn)證和凈化輸入

要攻擊 Web 程序最古老的方式之一是輸入,即:我們?cè)L問(wèn)數(shù)據(jù)的方式可能已經(jīng)改變,但是驗(yàn)證任意用戶輸入的需要還沒(méi)有改變。客戶端驗(yàn)證有助于防止錯(cuò)誤和改善用戶體驗(yàn),但是 API 還需要在對(duì)輸入執(zhí)行操作前驗(yàn)證和凈化(sanitize)輸入——凈化策略為刪除請(qǐng)求中的惡意或無(wú)效代碼。驗(yàn)證確保數(shù)據(jù)滿足資源期望的必要條件,例如:類(lèi)型、形式,甚至是密碼結(jié)構(gòu)等因素。

7、按需公開(kāi)

采用快捷方式將數(shù)據(jù)模型直接映射到接口是很誘人,但這不僅會(huì)產(chǎn)生冗長(zhǎng)的響應(yīng)、增加帶寬使用,而且還會(huì)暴露用戶不需要訪問(wèn)的數(shù)據(jù)。舉個(gè)例子:一個(gè) /user 接口要返回用戶信息。它可能只要用戶的一些基本信息,而不需要用戶的密碼/權(quán)限。

8、錯(cuò)誤消息的配置

除了對(duì) API 的輸入數(shù)據(jù)進(jìn)行凈化(sanitize)外,還需要對(duì)從中產(chǎn)生的信息進(jìn)行凈化。錯(cuò)誤消息對(duì)用戶了解問(wèn)題的發(fā)生至關(guān)重要,但要確保不泄漏任何敏感數(shù)據(jù)。向終端用戶提供 API 內(nèi)部代碼結(jié)構(gòu)的詳細(xì)信息會(huì)為攻擊者提供便利,所以一定要確保錯(cuò)誤信息的配置不僅能提供足夠的信息來(lái)幫助用戶調(diào)試,并提供足夠的信息讓他們報(bào)告問(wèn)題,但又不足以暴露應(yīng)用程序的內(nèi)部工作和敏感數(shù)據(jù)。

9、不要暴露敏感信息

API 開(kāi)放要建立在保護(hù)敏感數(shù)據(jù)之上,要確保不要在 JSON Web Token 和緩存中公開(kāi)細(xì)節(jié)。JWT(JSON Web Token) body 給人一種很安全的錯(cuò)覺(jué),其實(shí)它很容易破譯。因此,應(yīng)該避免 JTW 和緩存中,包含可用于訪問(wèn)應(yīng)用程序的用戶信息。同樣的建議也適用于 URL,要確保查詢字符串不會(huì)暴露敏感數(shù)據(jù)的細(xì)節(jié)。

10、評(píng)估依賴

開(kāi)發(fā)過(guò)程中我們并不是完全自己編寫(xiě)代碼,大多數(shù)情況下,代碼很大一部分會(huì)包含庫(kù)、中間件和各種來(lái)自外部源的依賴關(guān)系。雖然一般情況下我們可以認(rèn)為流行的軟件包是經(jīng)過(guò)實(shí)戰(zhàn)測(cè)試的,但即便如此,并不意味著這些依賴完全避免漏洞。因此,要確保你評(píng)估過(guò) API 的依賴關(guān)系——它們維護(hù)得好嗎?你使用的是最新版本嗎?有什么歷史問(wèn)題?也許最重要的事情是想一下:真的需要一個(gè)庫(kù)來(lái)實(shí)現(xiàn)你正在做的功能嗎?

11、允許用戶跟蹤和重置身份驗(yàn)證密鑰

提高 API 安全性的另一種方法是允許用戶重置他們的憑證并監(jiān)視使用情況。一個(gè)常見(jiàn)的錯(cuò)誤是不允許使用者重置他們的 API 密鑰。如果 API 使用者意外地公開(kāi)了他們的密鑰,或者惡意獲取密鑰,那么這個(gè)問(wèn)題現(xiàn)在會(huì)直接影響你的 API。相反,為了保證安全,你可以為他們創(chuàng)建一種管理訪問(wèn)的方法。

12、標(biāo)準(zhǔn)化服務(wù)中的認(rèn)證

我們看到像谷歌、微軟和亞馬遜這樣的 API 巨頭都對(duì)它們的 API 授權(quán)和認(rèn)證過(guò)程進(jìn)行了標(biāo)準(zhǔn)化。我們不妨考慮一種集中的方法,比如使用 API 網(wǎng)關(guān)或?qū)S玫娜肟邳c(diǎn)來(lái)處理身份驗(yàn)證請(qǐng)求。

遵循 OWASP 標(biāo)準(zhǔn)指南

除了這些最佳實(shí)踐之外,可以考慮采用開(kāi)放式 Web 應(yīng)用程序安全項(xiàng)目(Open Web Application Security Project,縮寫(xiě) OWASP)的建議。他們提供了特定平臺(tái)的指導(dǎo),以及即將推出的特定 API 的指導(dǎo)——API 安全 Top 10。除了在代碼層面保護(hù) API 之外,還需要確保正確配置服務(wù)器和基礎(chǔ)設(shè)施,以避免未經(jīng)授權(quán)的訪問(wèn)。

本文來(lái)自博客園,原文鏈接https://www.cnblogs.com/xueweihan/p/13873707.html

申請(qǐng)創(chuàng)業(yè)報(bào)道,分享創(chuàng)業(yè)好點(diǎn)子。點(diǎn)擊此處,共同探討創(chuàng)業(yè)新機(jī)遇!

相關(guān)標(biāo)簽
設(shè)計(jì)api

相關(guān)文章

  • 使用ajax跨域調(diào)用springboot框架的api傳輸文件

    這篇文章主要介紹了使用ajax跨域調(diào)用springboot框架的api傳輸文件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

    標(biāo)簽:
    ajax
    設(shè)計(jì)api
  • ASP .NET Core API發(fā)布與部署以及遇到的坑和解決方法

    這篇文章主要介紹了ASP.NETCoreAPI發(fā)布與部署以及遇到的坑和解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

    標(biāo)簽:
    asp.net
    設(shè)計(jì)api
  • 百度上線API主動(dòng)推送功能

    百度API主動(dòng)推送其實(shí)也網(wǎng)站普通收錄提交的一種方式,只不過(guò),使用API主動(dòng)推送之后,網(wǎng)站可以不用在人工提交網(wǎng)站新內(nèi)容,系統(tǒng)自動(dòng)向百度站長(zhǎng)平臺(tái)提交網(wǎng)站前一天更新的網(wǎng)站文章,產(chǎn)品,欄目等網(wǎng)站新數(shù)據(jù),如果有之前沒(méi)有收錄的網(wǎng)站內(nèi)容也可以使用Sitemap功能一次性向百度提交。

熱門(mén)排行

信息推薦