1.什么是API
API(Application Programming Interface,應用程序編程接口)是一些預先定義的函數,目的是提供應用程序與開發人員基于某軟件或硬件的以訪問一組例程的能力,而又無需訪問源碼,或理解內部工作機制的細節。通過API,就算不知道如何操作,也能將產品或服務與其他產品或服務進行互通。這樣就可以簡化應用開發,節省時間和成本。
API除了有應用“應用程序接口”的意思外,還特指 API的說明文檔,也稱為幫助文檔。 API作為應用編程接口,由應用程序來調用,提供API的稱為提供者,使用API的稱為消費者。API本質上是一個程序(程序1)中,專門用于與其他應用程序(程序2)進行交互的部分,也就是程序1的外部對接部門。程序員所編寫的程序2可以通過API程序的函數聲明來和程序1進行交互。API 由一個或多個方法組成,每個方法可以實現一個功能,比如發送消息,上傳文件,檢索消息等。 定義和作用看起來有些晦澀難懂,我們可以類比一個常見且熟悉的接口User Interface(縮寫為 UI)即用戶接口。UI本質上是一個系統中專門用于與人類使用者進行交互的部分。
UI可以是一個實物上的面板,也可以是由程序所驅動的顯示在屏幕上的界面。我們使用的應用一般有是圖形化界面的,都可以看作是一種用戶接口,比如按鈕,窗口,圖標等可視化組件。UI 定義了人與應用程序進行交互的方式。UI 由多個可視化組件構成,每個組件提供不同的交互方式,比如,在文本框中可以輸入一些消息,點擊按鈕可以發送消息等。 總之,API定義了應用程序與應用程序之間的交互,UI定義了人與應用程序之間的交互,并且兩種交互方式又相互關聯,用戶操作 UI 表達要實現的功能,而 UI 使用 API 來實際完成該功能。
2.API的分類
(1)根據API提供者和消費者所在的位置,可將API分為兩類:本地API:當API的提供者和消費者位于同一臺計算機上時,稱為本地API。遠程API:當API的提供者和消費者位于不同的計算機上時,稱為遠程API。 (2)根據API接口表現形式分類:
接口 | 協議 | 說明 |
HTTP接口 | HTTP | 當發起Http請求時,Http會通過TCP建立起一個到服務器的連接通道,在請求需要的數據完畢后,Http會立即將TCP連接斷開,Http連接是一種短連接、無狀態的連接。 |
RPC接口 | HTTP、TCP、UDP、自定義協議 | RPC遠程過程調用協議,它本質上是一種Client/Server模式,就相當于調用本地接口一樣調用遠程服務的接口,支持多種數據傳輸方式,如Json、XML、Binary等。 |
WebService接口 | SOAP協議通過XML封裝數據,Http協議傳輸數據 | WebService是一個應用程序向外界暴露出一個能通過Web進行調用的API,也就是系統對外的接口,使用XML來封裝數據,不依賴于語言,不依賴于平臺。 |
RESTFUL | HTTP | RESTFUL一種設計準則,而不是一種規范,用不同的HTTP動詞(如:GET、POST、DELETE、PUT)來表達不同的請求,降低開發的復雜性,提高系統的可伸縮性。 |
WebSocket | TCP、UDP | WebSocket是一個持久化的雙向通信協議,可實現客戶端和服務器端之間即時通訊。在WebSocket中,客戶端和服務器只需要完成一次握手,就可以創建持久性的連接,并進行雙向數據傳輸。 |
FTP | TCP/IP協議組中的協議之一 | FTP是文件傳輸協議,FTP協議包括兩個組成部分,其一為FTP服務器(存儲文件),其二為FTP客戶端。 |
(3)根據API接口訪問形式分類:
訪問形式 | 說明 | 應用 |
使用用戶令牌,通過Web API接口進行數據訪問 | 可以有效識別用戶的身份,為用戶接口返回用戶相關的數據。 | 用戶信息維護、密碼修改、用戶管理等與用戶信息相關的數據 |
使用安全簽名進行數據提交 | 這種方式提交的數據,URL連接的簽名參數是經過安全一定規則的加密的,服務器收到數據后也經過同樣規則的安全加密,確認數據沒有被中途篡改后,再進行數據修改處理。可以為不同接入方式(Web/APP/Winfrom等),指定不同的加密秘鑰,秘鑰是雙方約定的,并不在網絡連接上傳輸,連接傳輸的一般是這個接入的AppID,服務器通過這個AppID來進行簽名參數的加密對比,微信后臺的回調處理機制就類似于這種處理方式。 | 獲取令牌、用戶注冊、處理業務數據等 |
提供公開的接口調用,不需要傳入用戶令牌、或者對參數進行加密簽名 | 這種接口一般較少,只是提供一些很常規的數據顯示而已。 | 查詢系統版本、時間、天氣等數據 |
3.API安全
API安全基于多種安全規則的交叉,如下圖所示。
API安全的目標(CIA):
安全目標用于定義安全對于保護資產的實際意義。安全沒有統一的定義,有些場景中的定義可能是沖突的。從系統正確運行時希望達到或保持的安全目標出發,可以拆分安全目標。一些標準的安全目標幾乎適用于所有的系統,其中最著名的是“CIA三元組”: 機密性(Confientiality):確保信息只被預期的讀者訪問; 完整性(Integrity):防止未授權的創建,修改和刪除; 可用性(Availability):當用戶需要訪問API時,API總是可用的。 這三條原則始終很重要,在其他情景中,有一些原則和以上三條一樣重要。比如accountability/可追責(誰做了什么)或者non-repudiation/抗抵賴(不能否認做過的行為)等。
常見的API風險(STRIDE):
欺騙(Spoofing):偽裝成某人; 干預(Tampering):將不希望被修改的數據、消息或設置改掉; 否認(Repudiation):拒絕承認做過的事; 信息泄露(Information disclosure):將你希望保密的信息披露出來; 拒絕服務(Denial of service):阻止用戶訪問信息和服務; 越權(Elevation ofprivilege):做了你不希望他能做的事。
風險與安全機制的對應關系:
認證=>欺騙:確保你的用戶或客戶端真的是他(它)們自己 ; 授權=>信息泄漏/干預/越權:確保每個針對API的訪問都是經過授權的; 審計=>否認:確保所有的操作都被記錄,以便追溯和監控; 流控=>拒絕服務:防止用戶請求淹沒你的API; 加密=>信息泄漏:確保出入API的數據是私密的。
4.API安全威脅
OWASP API 安全性十大威脅: 對象級別授權中斷:對于未使用適當級別的授權保護的 API 對象,可能會因為較弱的對象訪問標識符而容易發生數據泄漏和未經授權的數據操作。例如,攻擊者可以利用一個可迭代的整數對象標識符。
用戶身份驗證中斷:身份驗證機制的實現通常不正確或缺失,使得攻擊者可以利用實現缺陷來訪問數據。
過多的數據暴露:惡意行動者會試圖直接訪問 API(可能通過重播有效請求),或者嗅探服務器和 API 之間的流量。對 API 操作和可用數據的分析可能會為攻擊者生成敏感數據,而這些敏感數據并沒有展示在前端應用程序中,也沒有被前端應用程序使用。
缺少資源和速率限制:缺少速率限制可能會導致數據外泄或對后端服務的成功 DDoS 攻擊,進而導致所有使用者的服務中斷。
功能級別授權中斷:具有不同層次結構、組和角色的復雜訪問控制策略,以及管理功能和常規功能之間不明確的分離,都會導致授權缺陷。通過利用這些問題,攻擊者可以訪問其他用戶的資源或管理功能。
大量分配:如果一個 API 提供的字段超過了客戶端對給定操作的需求,攻擊者可能會注入過多的屬性來對數據執行未經授權的操作。攻擊者可以通過檢查請求和響應或其他 API 的格式來發現未記錄的屬性,或進行猜測。如果你不使用強類型的編程語言,則此漏洞尤其適用。
安全配置錯誤:攻擊者可能會試圖利用安全配置錯誤漏洞,例如:缺少安全強化措施、啟用了不必要的功能、不必要地向 Internet 開放了網絡連接、使用了弱協議或密碼、可能允許未經授權地訪問系統的其他設置或終結點。
注入:接受用戶數據的任何終結點都可能會受到注入攻擊。示例包括但不限于:命令注入,其中惡意行動者試圖更改 API 請求以在托管 API 的操作系統上執行命令;SQL 注入,其中惡意行動者試圖更改 API 請求以針對 API 依賴的數據庫執行命令和查詢。
資產管理不當:與不當的資產管理相關的漏洞包括:缺少適當的 API 文檔或所有權信息、舊版 API 過多,可能缺少安全修補程序。
日志記錄和監視不足:如果日志記錄和監視不足,加上與事件響應的整合缺失或無效,攻擊者就能夠進一步攻擊系統、保持持久性、轉向更多系統進行篡改,以及提取或銷毀數據。大多數違反行為研究表明,檢測到違反行為的時間超過 200 天,通常是由外部方而不是通過內部流程或監視方式檢測到的。
5.API協議
SOAP:簡單對象訪問協議(Simple Object Access Protocol,SOAP),它是廣泛使用的最古老的以 Web 為中心的 API 協議。SOAP 于 1990 年代后期推出,是最早設計用于允許不同應用程序或服務使用網絡連接以系統方式共享資源的協議之一。SOAP 代表簡單對象訪問協議,是一種基于 XML 的消息傳遞與通信協議。必須創建 XML 文檔才能進行調用,而 SOAP 所需的 XML 格式并不完全直觀。這就會使得調用和調試變得困難,因為調試需要解析長字符串的復雜數據。另一方面,SOAP 依賴于標準協議,尤其是 HTTP 和 SMTP,并為 Web 服務提供數據傳輸。SOAP 的整個消息都是被寫在 XML 中的,因此它能夠獨立于各種語言在所有操作系統上都可用。
REST:表述性狀態傳遞(Representational State Transfer),由Roy Fielding在2000年的一篇論文中引入,其目標是解決SOAP的一些缺點。REST是基于 HTTP 協議的 Web 標準架構,REST相比于SOAP更靈活,因為它支持多種數據格式,而不需要 XML。遵循REST架構約束的Web API 被稱為RESTful API。對于開發人員來說,RESTful 架構是理解 API 功能和行為的最簡單工具之一。它不但能夠使得 API 架構易于維護和擴展,而且方便了內、外部開發人員去訪問 API。REST與SOAP又有著根本的區別,SOAP是一種協議,而REST是一種架構模式。這意味著RESTful Web API沒有官方標準。只要API 符合RESTful系統的6個導向性約束,就算作RESTful API:客戶端/服務器架構、無狀態、可緩存性、分層系統、統一接口、按需代碼(可選)。
JSON-RPC:JSON-RPC,是一個無狀態且輕量級的遠程過程調用(RPC)傳送協議,其傳遞內容透過 JSON 為主。相較于一般的 REST 透過網址(如 GET /user)調用遠程服務器,JSON-RPC 直接在內容中定義了欲調用的函數名稱(如 {"method": "getUser"}),這也令開發者不會陷于該使用 PUT 或者 PATCH 的問題之中。
gRPC:gRPC 是一個開源 API,也屬于 RPC 的范疇,是一個高性能,開源和通用的RPC框架,基于Protobuf序列化協議開發,且支持眾多開發語言。面向服務端和協議端,基于http/2設計,帶來諸如雙向流,流控,頭部壓縮,單TCP連接上的多路復用請求等特性。這些特性使得其在移動設備上表現的更好,更省電和節省空間。在gPRC里客戶端可以向調用本地對象一樣直接調用另一臺不同機器上服務端應用的方法,使得您能夠更容易地創建分布式應用和服務。
編輯:黃飛
-
API
+關注
關注
2文章
1499瀏覽量
61975 -
編程接口
+關注
關注
1文章
38瀏覽量
7988
原文標題:API安全基礎理論
文章出處:【微信號:Tide安全團隊,微信公眾號:Tide安全團隊】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論