Second Call: GET /items?skip=10&take=10

但是,如果該實(shí)體有任何 PII 或其他信息,那么黑客就可以抓取該端點(diǎn)以獲取數(shù)據(jù)庫(kù)中所有實(shí)體的轉(zhuǎn)儲(chǔ)。如果這些實(shí)體意外泄露了 PII 或其他敏感信息,這可能是最危險(xiǎn)的,但也可能為競(jìng)爭(zhēng)對(duì)手或其他人提供您企業(yè)的采用和使用統(tǒng)計(jì)數(shù)據(jù),或?yàn)樵p騙者提供獲取大量電子郵件列表的方法。看看 Venmo 數(shù)據(jù)是如何被提取的

一種簡(jiǎn)單的保護(hù)機(jī)制是檢查執(zhí)行次數(shù),如果大于 100 或 1000,則拋出錯(cuò)誤。這種機(jī)制的問(wèn)題有兩個(gè)方面:

  1. 對(duì)于數(shù)據(jù) API,合法客戶(hù)可能需要獲取和同步大量記錄(例如通過(guò) cron 作業(yè))。人為地設(shè)置較小的分頁(yè)限制可能會(huì)使您的 API 變得非常繁瑣,從而降低整體吞吐量。最大限制是為了確保滿(mǎn)足內(nèi)存和可擴(kuò)展性要求(并防止某些 DDoS 攻擊),而不是為了保證安全性。
  2. 這對(duì)于編寫(xiě)簡(jiǎn)單腳本并在重復(fù)訪問(wèn)之間隨機(jī)延遲的黑客來(lái)說(shuō)毫無(wú)保護(hù)。
skip = 0
while True:
response = requests.post('https://api.acmeinc.com/widgets?take=10&skip=' + skip),
headers={'Authorization': 'Bearer' + ' ' + sys.argv[1]})
print("Fetched 10 items")
sleep(randint(100,1000))
skip += 10

如何防范分頁(yè)攻擊

為了防止分頁(yè)攻擊,您應(yīng)該跟蹤每個(gè)用戶(hù)或 API 密鑰在特定時(shí)間段內(nèi)訪問(wèn)了單個(gè)資源的項(xiàng)目數(shù),而不僅僅是在請(qǐng)求級(jí)別。通過(guò)跟蹤用戶(hù)級(jí)別的 API 資源訪問(wèn)

監(jiān)控 API 分頁(yè)攻擊

不安全的 API 密鑰生成

大多數(shù) API 都受到某種 API 密鑰或 JWT(JSON Web 令牌)的保護(hù)。這提供了一種跟蹤和保護(hù) API 的自然方式,因?yàn)?API 安全工具可以檢測(cè)異常的 API 行為并自動(dòng)阻止對(duì) API 密鑰的訪問(wèn)。然而,黑客會(huì)通過(guò)從大量用戶(hù)生成和使用大量 API 密鑰來(lái)超越這些機(jī)制,就像網(wǎng)絡(luò)黑客會(huì)使用大量 IP 地址來(lái)規(guī)避 DDoS 保護(hù)一樣。

如何防范 API 密鑰池

防范此類(lèi)攻擊的最簡(jiǎn)單方法是要求人工注冊(cè)您的服務(wù)并生成 API 密鑰??梢允褂?Captcha 和雙因素身份驗(yàn)證等技術(shù)來(lái)阻止機(jī)器人流量。除非有合法的商業(yè)案例,否則注冊(cè)您服務(wù)的新用戶(hù)不應(yīng)能夠以編程方式生成 API 密鑰。相反,只有受信任的客戶(hù)才應(yīng)該能夠以編程方式生成 API 密鑰。更進(jìn)一步,確保在用戶(hù)和帳戶(hù)級(jí)別(而不僅僅是每個(gè) API 密鑰)對(duì)任何異常行為進(jìn)行異常檢測(cè)。

意外泄露密鑰

API 的使用方式會(huì)增加憑證泄露的可能性:

  1. API 預(yù)計(jì)會(huì)在無(wú)限的時(shí)間段內(nèi)被訪問(wèn),這增加了黑客獲得未過(guò)期的有效 API 密鑰的可能性。您將該 API 密鑰保存在服務(wù)器環(huán)境變量中,然后就忘了它。這與用戶(hù)登錄交互式網(wǎng)站(會(huì)話會(huì)在短暫持續(xù)時(shí)間后過(guò)期)的情況形成了鮮明對(duì)比。
  2. API 的使用者可以直接訪問(wèn)憑證,例如通過(guò) Postman 或 CURL 進(jìn)行調(diào)試時(shí)。只需一名開(kāi)發(fā)人員不小心將包含 API 密鑰的 CURL 命令復(fù)制/粘貼到公共論壇(如 GitHub Issues 或 Stack Overflow)中即可。
  3. API 密鑰通常是不記名令牌,不需要任何其他識(shí)別信息。API 無(wú)法利用一次性令牌或雙因素身份驗(yàn)證等功能。

如果由于用戶(hù)錯(cuò)誤而泄露密鑰,人們可能會(huì)認(rèn)為您作為 API 提供商應(yīng)該承擔(dān)責(zé)任。但是,安全性的關(guān)鍵在于減少接觸面積和風(fēng)險(xiǎn)。請(qǐng)像對(duì)待自己的數(shù)據(jù)一樣對(duì)待客戶(hù)數(shù)據(jù),并通過(guò)添加防止意外泄露密鑰的保護(hù)措施來(lái)幫助他們。

如何防止意外泄露密鑰

防止密鑰泄露的最簡(jiǎn)單方法是利用兩個(gè)令牌而不是一個(gè)。刷新令牌存儲(chǔ)為環(huán)境變量,只能用于生成短期訪問(wèn)令牌。與刷新令牌不同,這些短期令牌可以訪問(wèn)資源,但有時(shí)間限制,例如幾小時(shí)或幾天。

客戶(hù)將與其他 API 密鑰一起存儲(chǔ)刷新令牌。然后,您的 SDK 將在 SDK 初始化時(shí)或最后一個(gè)訪問(wèn)令牌過(guò)期時(shí)生成訪問(wèn)令牌。如果 CURL 命令被粘貼到 GitHub 問(wèn)題中,那么黑客需要在數(shù)小時(shí)內(nèi)使用它,從而減少攻擊媒介(除非它是實(shí)際的刷新令牌,但可能性很低)

遭受 DDoS 攻擊

API 開(kāi)辟了全新的商業(yè)模式,客戶(hù)可以通過(guò)編程方式訪問(wèn)您的 API 平臺(tái)。然而,這可能會(huì)使 DDoS 保護(hù)變得棘手。大多數(shù) DDoS 保護(hù)旨在吸收和拒絕來(lái)自惡意行為者的大量請(qǐng)求DDoS 攻擊

阻止 DDoS 攻擊

API 的神奇之處在于幾乎每次訪問(wèn)都需要 API 密鑰。如果請(qǐng)求沒(méi)有 API 密鑰,您可以自動(dòng)拒絕它,這對(duì)您的服務(wù)器來(lái)說(shuō)很輕量(確保在后續(xù)中間件(如請(qǐng)求 JSON 解析)之前盡早完成身份驗(yàn)證)。那么,您如何處理經(jīng)過(guò)身份驗(yàn)證的請(qǐng)求?最簡(jiǎn)單的方法是利用每個(gè) API 密鑰的速率限制計(jì)數(shù)器,例如每分鐘處理 X 個(gè)請(qǐng)求,并拒絕那些超過(guò)閾值的請(qǐng)求。429 HTTP response.有多種算法可以做到這一點(diǎn),例如漏桶和固定窗口計(jì)數(shù)器。

服務(wù)器安全性不正確

在良好的服務(wù)器衛(wèi)生方面,API 與 Web 服務(wù)器并無(wú)不同。由于 SSL 證書(shū)配置錯(cuò)誤或允許非 HTTPS 流量,數(shù)據(jù)可能會(huì)泄露。對(duì)于現(xiàn)代應(yīng)用程序,幾乎沒(méi)有理由接受非 HTTPS 請(qǐng)求,但客戶(hù)可能會(huì)錯(cuò)誤地從其應(yīng)用程序或 CURL 發(fā)出非 HTTP 請(qǐng)求,從而暴露 API 密鑰。API 沒(méi)有瀏覽器的保護(hù),因此 HSTS 或重定向到 HTTPS 之類(lèi)的東西無(wú)法提供保護(hù)。

如何確保 SSL 正確

通過(guò)以下網(wǎng)址測(cè)試您的 SSL 實(shí)現(xiàn)Qualys SSL 測(cè)試REST API 跨源資源共享權(quán)威指南

緩存標(biāo)頭不正確

API 提供對(duì)每個(gè) API 密鑰范圍內(nèi)的動(dòng)態(tài)數(shù)據(jù)的訪問(wèn)。任何緩存實(shí)現(xiàn)都應(yīng)該能夠?qū)⒎秶薅ǖ?API 密鑰,以防止交叉污染。即使您不在基礎(chǔ)架構(gòu)中緩存任何內(nèi)容,也可能使客戶(hù)面臨安全漏洞。如果使用代理服務(wù)器的客戶(hù)使用多個(gè) API 密鑰(例如一個(gè)用于開(kāi)發(fā),一個(gè)用于生產(chǎn)),那么他們可能會(huì)看到交叉污染的數(shù)據(jù)。為了避免這種潛在的漏洞,建議購(gòu)買(mǎi)移動(dòng)代理可以為每個(gè)用戶(hù)或應(yīng)用程序提供增強(qiáng)的安全性和專(zhuān)用隔離的服務(wù)。

這有多嚴(yán)重?參見(jiàn) Twitter 在數(shù)據(jù)安全事件后披露賬單信息泄露

如何確保不緩存

你應(yīng)該確保緩存控制標(biāo)頭已正確配置。

API 的一個(gè)大問(wèn)題是,許多 API 不使用標(biāo)準(zhǔn)Authorization標(biāo)頭,而是使用自定義標(biāo)頭,如X-Api-Key。緩存服務(wù)器不知道此請(qǐng)求是否經(jīng)過(guò)身份驗(yàn)證,因此選擇緩存該請(qǐng)求。

app.use((req, res, next) => {
res.setHeader('Cache-Control', 'no-store, no-cache, must-revalidate');
res.setHeader('Pragma', 'no-cache');
// ...
});

記錄和監(jiān)控不足

這是 OWASP 十大 API 安全項(xiàng)目。大多數(shù)漏洞研究表明,檢測(cè)數(shù)據(jù)泄露的時(shí)間超過(guò) 200 天。如果您沒(méi)有適當(dāng)?shù)?API 日志記錄和監(jiān)控,攻擊者可以繼續(xù)使用相同的漏洞,甚至探測(cè)更多漏洞。

如何正確添加 API 日志記錄

您應(yīng)該確保您的 API 日志記錄不僅跟蹤 API 請(qǐng)求本身,還應(yīng)與用戶(hù)相關(guān)聯(lián)以進(jìn)行用戶(hù)行為分析并存儲(chǔ)至少一年。這些系統(tǒng)應(yīng)受到保護(hù),以確保數(shù)據(jù)不會(huì)被意外刪除或提前退出。出于安全目的,GDPR 和 CCPA 為 API 審計(jì)日志提供了例外情況。解決方案包括Moesif API 安全性為 API 產(chǎn)品提供全套 API 監(jiān)控和分析,只需幾分鐘即可開(kāi)始使用。

API 審計(jì)日志

不保護(hù)內(nèi)部端點(diǎn)

同一 API 服務(wù)可能具有供外部和外部使用的端點(diǎn)。端點(diǎn)未記錄并不意味著黑客無(wú)法調(diào)用它。除了使用身份驗(yàn)證和授權(quán)方案進(jìn)行保護(hù)外,您還應(yīng)確保這些端點(diǎn)完全不暴露在公共互聯(lián)網(wǎng)上,這可以在負(fù)載均衡器或 API 網(wǎng)關(guān)內(nèi)完成。這有助于提供多層次的安全性,這是一種常見(jiàn)的預(yù)防策略。

不辦理授權(quán)

雖然大多數(shù) API 開(kāi)發(fā)人員都會(huì)添加全局身份驗(yàn)證方案(例如 API 密鑰或 OAuth)來(lái)驗(yàn)證人員身份,但授權(quán)也是必需的,并且與身份驗(yàn)證分開(kāi),因此實(shí)施起來(lái)比較困難。授權(quán)涉及檢查此人(已識(shí)別)是否可以訪問(wèn)特定資源。這可以通過(guò) API 范圍、檢查租戶(hù) ID 或用戶(hù) ID 等來(lái)完成。

由于授權(quán)特定于您的應(yīng)用程序邏輯,并且并非總是橫切的,因此它可能是開(kāi)發(fā)人員容易忘記的一個(gè)領(lǐng)域。除非您的對(duì)象標(biāo)識(shí)符具有足夠的熵,否則黑客可以通過(guò)迭代輕松測(cè)試不同的 ID。對(duì)于在插入時(shí)增加 ID 的 SQL 數(shù)據(jù)庫(kù)來(lái)說(shuō)尤其如此。

如何修復(fù)授權(quán)

確保經(jīng)過(guò)身份驗(yàn)證的用戶(hù)有權(quán)訪問(wèn)生成 API 響應(yīng)所需的所有資源。這可能涉及檢查與相關(guān)對(duì)象關(guān)聯(lián)的用戶(hù) ID 或訪問(wèn)控制列表 (ACL)。有關(guān)如何處理授權(quán)的更多信息,請(qǐng)查看我們的帖子《為RESTful API構(gòu)建身份驗(yàn)證和授權(quán)的步驟》

原文地址:https://www.moesif.com/blog/technical/api-security/API-Security-Threats-Every-API-Team-Should-Know/

上一篇:

安全好用的OpenApi

下一篇:

在 Golang 中實(shí)現(xiàn) JWT 令牌認(rèn)證
#你可能也喜歡這些API文章!

我們有何不同?

API服務(wù)商零注冊(cè)

多API并行試用

數(shù)據(jù)驅(qū)動(dòng)選型,提升決策效率

查看全部API→
??

熱門(mén)場(chǎng)景實(shí)測(cè),選對(duì)API

#AI文本生成大模型API

對(duì)比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉(zhuǎn)化潛力

25個(gè)渠道
一鍵對(duì)比試用API 限時(shí)免費(fèi)

#AI深度推理大模型API

對(duì)比大模型API的邏輯推理準(zhǔn)確性、分析深度、可視化建議合理性

10個(gè)渠道
一鍵對(duì)比試用API 限時(shí)免費(fèi)