自1960年代結(jié)構(gòu)化編程出現(xiàn)以來,API一直是軟件開發(fā)的重要因素。API是一組函數(shù)或例行程序,其目的是完成特定任務(wù)或提供一種簡單方法來與軟件組件交互,這通常允許對(duì)通用流程進(jìn)行自動(dòng)化以更好地與在其他機(jī)器運(yùn)行的服務(wù)交互。
現(xiàn)在,保護(hù)API變得越來越重要。雖然API已經(jīng)被使用了幾十年,而近年來Web 2.0和云計(jì)算的到來讓API的數(shù)量和使用都大幅增加,目前有超過14萬公共API。其中Facebook、谷歌、Twitter、eBay和Amazon提供的API可能是最著名的,還有很多其他企業(yè)也通過提供API來提供對(duì)其內(nèi)部數(shù)據(jù)的訪問。例如,Salesforce公司的客戶可以使用其API來整合Salesforce服務(wù)到他們的系統(tǒng),正如Facebook Platform API讓開發(fā)人員可以創(chuàng)建數(shù)千應(yīng)用和服務(wù)來訪問Facebook數(shù)據(jù)一樣。
API帶來的商業(yè)機(jī)會(huì)幾乎是不可抗拒的,但API提供商和API消費(fèi)者需要確保API部署的安全性,讓攻擊者無法使用它們來攻擊企業(yè)或其用戶。根據(jù)云安全聯(lián)盟表示,不安全的API是云計(jì)算面臨的最大的威脅之一。
API安全風(fēng)險(xiǎn)的性質(zhì)
API提供了對(duì)應(yīng)用功能的訪問權(quán)限,這意味著它們?cè)黾恿斯裘?,并且,攻擊者?huì)盡全力濫用或?qū)ふ伊餍蠥PI代碼中的漏洞,因?yàn)樗鼈兛梢员挥脕砉舸罅繎?yīng)用和用戶。為了說明這一點(diǎn),讓我們假設(shè)一個(gè)虛構(gòu)的公司:MashOurDataInc公司,該公司提供API以允許開發(fā)人員從其數(shù)據(jù)中心提取數(shù)據(jù)。攻擊者已經(jīng)成功地將惡意腳本注入到主要數(shù)據(jù)庫,如果MashOurDataInc公司的API代碼在響應(yīng)API請(qǐng)求發(fā)送數(shù)據(jù)之前沒有清洗數(shù)據(jù),那么,攻擊者的惡意腳本可能會(huì)發(fā)送到使用MashOurDataInc的API的任意應(yīng)用,這意味著成千上萬的用戶將受到影響。
保護(hù)API來降低風(fēng)險(xiǎn)
如果開發(fā)人員在構(gòu)建應(yīng)用或服務(wù)時(shí)通過API使用第三方數(shù)據(jù),那么,在代碼中使用這些API之前,開發(fā)人員必須完全明白它們的工作原理以及應(yīng)該如何調(diào)用它們,以免制造潛在的漏洞。這就是說,開發(fā)人員需要閱讀所有相關(guān)的API文檔,其中應(yīng)該包含保護(hù)API函數(shù)或例行程序的部分,例如如何調(diào)用API、需要怎樣的身份驗(yàn)證、哪些數(shù)據(jù)將會(huì)返回以及以何種格式,可能出現(xiàn)哪些錯(cuò)誤。
對(duì)正在使用的API構(gòu)建威脅模型可以幫助企業(yè)了解攻擊面,并確定潛在的安全問題,從而在一開始就可以構(gòu)建適當(dāng)?shù)陌踩徑獯胧irebug和Chrome Developer Tools等調(diào)試工具可以幫助確定和檢查API生成的數(shù)據(jù)流,并突出應(yīng)如何保護(hù)API。
如果應(yīng)用接收第三方傳輸?shù)臄?shù)據(jù),則不應(yīng)該認(rèn)為這些數(shù)據(jù)已經(jīng)被清洗或正確驗(yàn)證。開發(fā)人員必須構(gòu)建數(shù)據(jù)清洗和驗(yàn)證例行程序以防止標(biāo)準(zhǔn)注入漏洞和跨站請(qǐng)求偽造攻擊,特別是對(duì)于傳輸JSON和XML消息或用戶生成的內(nèi)容的API,因?yàn)樗羞@些數(shù)據(jù)都來自不受信任來源。此外,在調(diào)用API之前,企業(yè)還需要驗(yàn)證用戶或設(shè)備具有正確的權(quán)限來查看、編輯或刪除請(qǐng)求的數(shù)據(jù);很多開發(fā)人員在用戶經(jīng)過身份驗(yàn)證后沒有進(jìn)行二次訪問控制檢查。
企業(yè)開發(fā)API以允許他人來訪問其內(nèi)部數(shù)據(jù)系統(tǒng)時(shí),應(yīng)該專注于構(gòu)建和測(cè)試控件來管理對(duì)API的訪問權(quán)限。這些控制應(yīng)該明確他人對(duì)不同類別的數(shù)據(jù)可以做什么以及不能做什么。此外,在允許查看、編輯或刪除數(shù)據(jù)前應(yīng)該進(jìn)行二次訪問控制檢查。
企業(yè)還應(yīng)該記錄保護(hù)API的要求,這會(huì)讓企業(yè)更容易確保后續(xù)代碼更改仍然滿足針對(duì)個(gè)人或敏感信息的數(shù)據(jù)處理政策要求。同時(shí),企業(yè)還需要記錄哪些信息應(yīng)該進(jìn)行日志記錄以捕捉誰、什么以及何時(shí)在訪問API,以滿足審計(jì)要求。企業(yè)應(yīng)該分析這些日志記錄--最好通過安全信息和事件管理工具,從而檢測(cè)和阻止任何異常行為(例如暴力攻擊)。
API可以創(chuàng)造無數(shù)的機(jī)會(huì)來提高客戶服務(wù)和互動(dòng),并可幫助提高生產(chǎn)效率和利潤;它們甚至成為有些公司立足的產(chǎn)品或服務(wù)。然而,考慮到API帶來的潛在風(fēng)險(xiǎn),企業(yè)應(yīng)該將風(fēng)險(xiǎn)緩解作為任何API集成戰(zhàn)略的核心。