## API安全設(shè)計(jì)原則
論文“信息的保護(hù)計(jì)算機(jī)系統(tǒng)”,由杰羅姆Saltzer和邁克爾·施羅德,提出8個(gè)的設(shè)計(jì)原則,同樣適用于RESTful-API。
REST(表述性狀態(tài)轉(zhuǎn)移)API 通常使用 HTTP,并依賴 HTTPS 等機(jī)制進(jìn)行加密、OAuth 進(jìn)行授權(quán)以及 JWT(JSON Web 令牌)進(jìn)行安全令牌交換。它們的無(wú)狀態(tài)性質(zhì)意味著應(yīng)用程序必須單獨(dú)驗(yàn)證每個(gè)請(qǐng)求,從而增強(qiáng)安全性。REST 在選擇安全協(xié)議方面的靈活性允許 更容易 但需要仔細(xì)配置以防止漏洞。
另一方面,SOAP(簡(jiǎn)單對(duì)象訪問(wèn)協(xié)議)API 在其協(xié)議中內(nèi)置了 WS-Security 安全性。SOAP 包括消息完整性、機(jī)密性和身份驗(yàn)證的標(biāo)準(zhǔn)。 SOAP 可以使用安全套接字層 (SSL) 或傳輸層安全性 (TLS) 用于加密. 盡管如此,其消息級(jí)安全性確保即使傳輸層受到威脅,消息仍保持安全。SOAP 的嚴(yán)格標(biāo)準(zhǔn)使其本質(zhì)上更安全,但實(shí)施和維護(hù)也更復(fù)雜。
## API安全最佳實(shí)踐
REST是一個(gè)架構(gòu)約定,在該約定中,缺少安全特性相關(guān)的內(nèi)容。經(jīng)過(guò)這些年的發(fā)展,市場(chǎng)總結(jié)了一些REST 的 API安全最佳實(shí)踐,有些已經(jīng)默認(rèn)實(shí)現(xiàn)在網(wǎng)關(guān)產(chǎn)品、有些需要開(kāi)發(fā)者自己負(fù)責(zé),供大家參考:
1、始終強(qiáng)制使用TLS加密,網(wǎng)關(guān)產(chǎn)品可提供
與其他類(lèi)型的敏感 HTTP 流量一樣,將 TLS 用于 RESTful API 有助于確保對(duì) API 用戶和 API 端點(diǎn)之間的所有通信進(jìn)行加密。這對(duì)于 REST API 安全性和 Web 應(yīng)用程序安全性同樣重要,因?yàn)樯傻?HTTP 流量包含敏感的身份驗(yàn)證詳細(xì)信息,如密碼、API 密鑰或令牌。
2、API秘鑰,部分網(wǎng)關(guān)產(chǎn)品可提供
API密鑰可用于請(qǐng)求方身份標(biāo)識(shí),用API秘鑰加密請(qǐng)求內(nèi)容及響應(yīng)內(nèi)容。常用方式有’對(duì)稱(chēng)秘鑰、非對(duì)稱(chēng)秘鑰‘等,避免使用Appcode模式。B2B模式的API網(wǎng)關(guān)必用API秘鑰;自有APP到API網(wǎng)關(guān)時(shí),常用非對(duì)稱(chēng)秘鑰模式+其它手段來(lái)標(biāo)識(shí)‘APP’,避免套殼等風(fēng)險(xiǎn)。
3、身份認(rèn)證 ,三方產(chǎn)品可提供
認(rèn)證是指驗(yàn)證用戶身份的過(guò)程,常見(jiàn)的認(rèn)證方式包括 HTTP Basic 認(rèn)證、SAML、Token 認(rèn)證、OAuth 2.0 等。
4、授權(quán)模型,三方產(chǎn)品可提供
授權(quán)是指驗(yàn)證用戶是否有訪問(wèn)特定資源的權(quán)限。通過(guò)API訪問(wèn)內(nèi)部數(shù)據(jù)和系統(tǒng)的組織必須引入和測(cè)試控制來(lái)管理這種訪問(wèn):何人、內(nèi)容和時(shí)間,以及對(duì)數(shù)據(jù)訪問(wèn)、創(chuàng)建、更新和刪除的檢查——零信任安全模型。
5、不在URL中包含敏感信息,做URL過(guò)濾,開(kāi)發(fā)者負(fù)責(zé)
一個(gè)常見(jiàn)的 REST API 設(shè)計(jì)缺陷是在 URL 中包含敏感信息,包括用戶憑據(jù)、密鑰或令牌。
6、嚴(yán)格定義允許的RESTful API請(qǐng)求和響應(yīng),開(kāi)發(fā)者負(fù)責(zé)
— 錯(cuò)誤處理
— 應(yīng)始終考慮對(duì)輸入進(jìn)行驗(yàn)證
— 嚴(yán)格管控 REST API 可提供的響應(yīng)類(lèi)型。例如,響應(yīng)應(yīng)限制為明確允許的內(nèi)容類(lèi)型,如 GET、PUT 和 POST。
7、重要ID不透明處理,開(kāi)發(fā)者負(fù)責(zé)
在系統(tǒng)一些敏感功能上,比如,/user/1123 可獲取 id=1123 用戶的信息,為了防止字典遍歷攻擊,可對(duì) id 進(jìn)行 url62 或者 uuid 處理,這樣處理的 id 是唯一的,并且還是字符安全的。
8、速率限制,網(wǎng)關(guān)產(chǎn)品可提供
設(shè)計(jì)良好的API還可以應(yīng)用速率限制和地理速度檢查,以及作為地理圍欄和I/O內(nèi)容驗(yàn)證和消毒等策略的執(zhí)行點(diǎn)。
9、實(shí)施持續(xù)API發(fā)現(xiàn)功能,避免產(chǎn)生新的安全漏洞,三方產(chǎn)品可提供
分析API日志以獲取 API 活動(dòng)的證據(jù),這將有助于確保您的安全團(tuán)隊(duì)了解企業(yè)中正在使用的所有 API。
RESTful應(yīng)用程序依賴于API生態(tài)系統(tǒng)的底層安全性,而不是在REST架構(gòu)風(fēng)格中包含安全性。除了通過(guò)HTTPS協(xié)議保護(hù)RESTful API調(diào)用之外,還應(yīng)使用基于會(huì)話的身份驗(yàn)證。目前,大多數(shù)RESTful應(yīng)用程序利用了OAuth 2.0和Open ID Connect(OIDC)協(xié)議。
安全評(píng)估標(biāo)記語(yǔ)言(SAML)最初由大學(xué)設(shè)計(jì),以允許其他大學(xué)的學(xué)生訪問(wèn)圖書(shū)館?;?a href='http://cnzze.cn/wiki/xml/' target='_blank'>XML和SOAP是原始的聯(lián)合身份系統(tǒng)。在2000年代初期,當(dāng)互聯(lián)網(wǎng)瀏覽器成為主要客戶的時(shí)候,SAML被推出。
OAuth 2創(chuàng)建于2006年,是認(rèn)證協(xié)議的開(kāi)放標(biāo)準(zhǔn),通過(guò)HTTP提供授權(quán)工作流程,并授權(quán)設(shè)備,服務(wù)器,應(yīng)用程序和API以及訪問(wèn)令牌而不是憑據(jù)。 OAuth從Facebook,Google,Microsoft和Twitter的使用中獲得了普及,他們?cè)试S使用他們的帳戶與第三方應(yīng)用程序或網(wǎng)站共享。
開(kāi)放式ID連接(OIDC)擴(kuò)展了OAuth 2,并將用戶信息(身份層)作為請(qǐng)求的一部分。考慮到SAML的現(xiàn)代版本,OIDC允許一系列客戶端,包括基于Web的移動(dòng)設(shè)備和使用JavaScript的客戶端。
JSON Web Token(JWT)是一種用于創(chuàng)建訪問(wèn)令牌的開(kāi)放標(biāo)準(zhǔn),用于聲明一些聲明。使用[[json|JSON]]編寫(xiě)的令牌旨在緊湊 – 專(zhuān)注于使用Web瀏覽器,單點(diǎn)登錄(SSO)上下文。雖然不是身份提供商或服務(wù)提供商,但JWT用于在身份和服務(wù)提供商之間傳遞身份驗(yàn)證的用戶身份。
RESTful API建模語(yǔ)言(RAML)是一種旨在描述RESTful API的語(yǔ)言。 RAML是用YAML人類(lèi)可讀的數(shù)據(jù)串行化語(yǔ)言編寫(xiě)的。 RAML的努力首先在2013年提出,并獲得了諸如MuleSoft,AngularJS,Intuit,Box,PayPal,可編程Web和API Web Science,Kin Lane,SOA Software和Cisco等技術(shù)領(lǐng)導(dǎo)者的支持。 RAML的目標(biāo)是提供所有必要的信息來(lái)描述RESTful API,從而提供一種更簡(jiǎn)單的設(shè)計(jì)API的方法。
REST API 面臨的 7 大安全威脅REST API 安全要點(diǎn)
API 安全性實(shí)踐API安全成熟度模型
應(yīng)用程序接口(API)安全的入門(mén)指南 ,大量基礎(chǔ)概念,可以作為清單來(lái)用
Web應(yīng)用風(fēng)險(xiǎn)點(diǎn)有哪些?