微信截圖_17436518464103.png)
使用DeepSeek和Claude繪制出高質(zhì)量的SVG 圖片
但是,如果該實(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è)方面:
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īng)該跟蹤每個(gè)用戶(hù)或 API 密鑰在特定時(shí)間段內(nèi)訪問(wèn)了單個(gè)資源的項(xiàng)目數(shù),而不僅僅是在請(qǐng)求級(jí)別。通過(guò)跟蹤用戶(hù)級(jí)別的 API 資源訪問(wèn)
大多數(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ù)一樣。
防范此類(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ì)增加憑證泄露的可能性:
如果由于用戶(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í)際的刷新令牌,但可能性很低)
API 開(kāi)辟了全新的商業(yè)模式,客戶(hù)可以通過(guò)編程方式訪問(wèn)您的 API 平臺(tái)。然而,這可能會(huì)使 DDoS 保護(hù)變得棘手。大多數(shù) DDoS 保護(hù)旨在吸收和拒絕來(lái)自惡意行為者的大量請(qǐng)求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è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ù)。
通過(guò)以下網(wǎng)址測(cè)試您的 SSL 實(shí)現(xiàn)Qualys SSL 測(cè)試REST API 跨源資源共享權(quán)威指南
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');
// ...
});
這是 OWASP 十大 API 安全項(xiàng)目。大多數(shù)漏洞研究表明,檢測(cè)數(shù)據(jù)泄露的時(shí)間超過(guò) 200 天。如果您沒(méi)有適當(dāng)?shù)?API 日志記錄和監(jiān)控,攻擊者可以繼續(xù)使用相同的漏洞,甚至探測(cè)更多漏洞。
您應(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 服務(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ù)防策略。
雖然大多數(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ō)尤其如此。
確保經(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/
對(duì)比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉(zhuǎn)化潛力
一鍵對(duì)比試用API 限時(shí)免費(fèi)