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ù)訪(fǎng)問(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)訪(fǎng)問(wèn)了單個(gè)資源的項(xiàng)目數(shù),而不僅僅是在請(qǐng)求級(jí)別。通過(guò)跟蹤用戶(hù)級(jí)別的 API 資源訪(fǎng)問(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 密鑰的訪(fǎng)問(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)被訪(fǎng)問(wèn),這增加了黑客獲得未過(guò)期的有效 API 密鑰的可能性。您將該 API 密鑰保存在服務(wù)器環(huán)境變量中,然后就忘了它。這與用戶(hù)登錄交互式網(wǎng)站(會(huì)話(huà)會(huì)在短暫持續(xù)時(shí)間后過(guò)期)的情況形成了鮮明對(duì)比。
  2. API 的使用者可以直接訪(fǎng)問(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)境變量,只能用于生成短期訪(fǎng)問(wèn)令牌。與刷新令牌不同,這些短期令牌可以訪(fǎng)問(wèn)資源,但有時(shí)間限制,例如幾小時(shí)或幾天。

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

遭受 DDoS 攻擊

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

阻止 DDoS 攻擊

API 的神奇之處在于幾乎每次訪(fǎng)問(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ù)的訪(fǎng)問(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í)別)是否可以訪(fǎng)問(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)訪(fǎng)問(wèn)生成 API 響應(yīng)所需的所有資源。這可能涉及檢查與相關(guān)對(duì)象關(guān)聯(lián)的用戶(hù) ID 或訪(fǎng)問(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)