如何設(shè)計(jì)安全可靠的 API ?
如何設(shè)計(jì)安全可靠的 API ?下圖列出了 12 條原則。
圖片
01 使用 HTTPS
- 數(shù)據(jù)加密:HTTPS 對(duì)客戶端和服務(wù)器之間傳輸?shù)臄?shù)據(jù)進(jìn)行加密。它使用 TLS 或其前身 SSL 對(duì)通信進(jìn)行加密。這種加密可確保用戶數(shù)據(jù)、身份驗(yàn)證等敏感信息在傳輸過(guò)程中保持安全。如果沒(méi)有 HTTPS,這些信息可能會(huì)被數(shù)據(jù)包嗅探等技術(shù)截獲。
- 合規(guī)要求:許多監(jiān)管標(biāo)準(zhǔn),如 GDPR 和 PCI DSS,都要求使用 HTTPS 來(lái)保護(hù)用戶的敏感信息。
- SEO 要求:谷歌等搜索引擎會(huì)優(yōu)先考慮支持 HTTPS 的網(wǎng)站和應(yīng)用程序接口,認(rèn)為它們更安全。
02 使用 OAuth 2.0
OAuth 2.0 對(duì)設(shè)計(jì)安全可靠的 API 至關(guān)重要,因?yàn)樗軌蛟?strong>不共享用戶憑證的情況下使用代理來(lái)訪問(wèn)資源。它還支持跨多個(gè)應(yīng)用程序和服務(wù)的集成,促進(jìn)了單點(diǎn)登錄(SSO),允許用戶進(jìn)行一次身份驗(yàn)證來(lái)無(wú)縫訪問(wèn)多個(gè)服務(wù)或應(yīng)用程序。
03 使用 WebAuthn
WebAuthn 不依賴于集中式服務(wù)器或密碼數(shù)據(jù)庫(kù)。它允許用戶注冊(cè)和使用自己的設(shè)備(如安全密鑰或生物特征識(shí)別設(shè)備)進(jìn)行身份驗(yàn)證,消除僅依賴密碼的弱點(diǎn)。通過(guò)實(shí)現(xiàn) WebAuthn,API 可以符合 FIDO 等安全標(biāo)準(zhǔn),滿足合規(guī)要求。
04 使用分級(jí) API Key
我們通常要針對(duì)系統(tǒng)開(kāi)放的服務(wù)接口設(shè)計(jì)不同的訪問(wèn)權(quán)限。分級(jí)的 API Key 可以提供細(xì)粒度的訪問(wèn)控制。比如,在使用 Stripe 時(shí),我們可以給“訪問(wèn)賬戶”指定一個(gè)只讀 API Key,給“操作賬戶”指定另一個(gè) API Key。
05 授權(quán)
這一條和上一條相關(guān)。我們需要給系統(tǒng)內(nèi)部的各種 API 接口設(shè)計(jì)訪問(wèn)授權(quán),遵循“最小權(quán)限”原則。
06 限流
在設(shè)計(jì) API 時(shí),需要估計(jì)大致容量,并針對(duì)容量來(lái)限流,從而保護(hù)系統(tǒng)。限流的好處有很多,比如防止 DDos 攻擊,防止系統(tǒng)過(guò)載,合理分配系統(tǒng)資源等。
07 版本控制
API 版本控制提供了一種結(jié)構(gòu)化的 API 生命周期管理方法,將 API 的管理提升到代碼一個(gè)級(jí)別,同時(shí)確保向后兼容性。它使開(kāi)發(fā)人員能夠引入新功能而不會(huì)破壞用戶對(duì)于舊版本的依賴。
08 白名單
白名單指定并僅允許預(yù)先批準(zhǔn)的 IP 地址或用戶訪問(wèn) API。這有助于防止常見(jiàn)的安全威脅,如未經(jīng)授權(quán)的訪問(wèn)、數(shù)據(jù)泄露、注入攻擊等。它提高了潛在攻擊者的門(mén)檻。
09 定期檢查 OWASP API 安全風(fēng)險(xiǎn)清單
The OWASP API Security Top 10 是由 OWASP(Open Web Application Security Project)編制的清單,該組織致力于提高軟件安全性。該清單特別突出了與 API 相關(guān)的最關(guān)鍵安全風(fēng)險(xiǎn),旨在提高開(kāi)發(fā)人員、安全專業(yè)人員和組織對(duì) API 相關(guān)漏洞和威脅的意識(shí),并提供指導(dǎo),以有效解決這些問(wèn)題。
10 使用 API 網(wǎng)關(guān)
API 網(wǎng)關(guān)作為入站 API 請(qǐng)求的集中入口點(diǎn)。它們能夠?qū)嵤┲T如身份驗(yàn)證、授權(quán)、加密和威脅防護(hù)等安全措施。這種集中化能夠在所有 API 中應(yīng)用一致的安全策略。
11 錯(cuò)誤處理
有效的錯(cuò)誤處理機(jī)制使 API 能夠優(yōu)雅地處理意外情況或故障,確保錯(cuò)誤得到適當(dāng)?shù)貍鬟_(dá)給客戶端,提供更好的用戶體驗(yàn)。確保返回給客戶端的錯(cuò)誤消息不會(huì)暴露 API 內(nèi)部運(yùn)作或基礎(chǔ)架構(gòu)的敏感信息。
12 輸入驗(yàn)證
無(wú)效或格式不正確的輸入數(shù)據(jù)可能導(dǎo)致數(shù)據(jù)丟失、損壞或系統(tǒng)崩潰。輸入驗(yàn)證在設(shè)計(jì)安全可靠的 API 中至關(guān)重要,有助于防止常見(jiàn)的攻擊,如 SQL 注入、NoSQL 注入和其他基于注入的漏洞。