關於RESTful API安全

關於RESTful API安全

隨著手機和移動互聯網的興起,REST(Representational State Transfer,表現層狀態傳輸)架構逐漸流行起來,被廣泛地使用。

關於RESTful API安全

REST這個名稱是Roy Fielding在美國加州UC Irvine大學的畢業博士論文中引入和定義的。Roy Fielding是個著名的互聯網技術專家,除了提出REST外,還曾參與HTTP協議以及Apache httpd Web服務器的開發。

關於RESTful API安全

REST 的基本原理包括:

系統上的一切對象都要抽象為資源;

每個資源對應唯一的資源標識(URI);

對資源的操作不能改變資源標識本身;

所有的操作都是無狀態的等等。

關於RESTful API安全

實現隨機輸出名句、查詢IP歸屬地功能:

關於RESTful API安全

獲取監控數據功能:

關於RESTful API安全

好了閒話少敘,今天筆者在這裡和大家聊聊REST架構中需要關注的RESTful API安全性問題。

API身份驗證

HTTP基本身份驗證:

API驗證一般來說會使用基於Token的認證,第一次認證通過後,就會獲取到一個Token字串,以後請求中帶上此Token就可以。此Token憑據僅使用Base64編碼,沒有加密,沒有散列。每個請求都在頭部中包含此Token字串。因此,如果Web傳輸時候用的是沒有加密的HTTP,而不是HTTPS的話,基本上沒有任何安全可言,在網絡傳輸過程中會被別人抓包,很容易竊取到。所以,HTTP基本身份驗證非常危險,基本等於自殺。

但是一般來說我們如果是限制在內網、局域網內部使用的話,基本上還是可靠的。

原則一,不對對外開放不安全的API訪問權限、

原則二,使用HTTPS加密傳輸。

Oauth認證

Oauth(Open Authorization)協議為資源訪問提供一條簡易,開放和安全的通道。

在Oauth認證情況下,服務提供商、資源所有者提供商可靠地訪問token,通訪問Token獲取特定範圍的資源URL的許可。Oauth認證時時最主要的安全問題是訪問Token洩漏可能很危險,擁有Token的就可以獲得操作的權限。

在這方面著名的社交網絡網站Facebook就遭遇過安全問題。相關信息可以通過搜索引擎獲得相應信息。

關於RESTful API安全

Goldshlager通過特定攻擊繞過OAuth的機制,通過漏洞實現劫持。

關於RESTful API安全

最後Facebook對此安全bug進行了買單,支付了發現者12,500美元的漏洞獎勵。

關於RESTful API安全

有安全機構曾對國內的服務商的Oauth安全做過調查,發現都曾有過一些問題。

下面是創宇安全團隊2014年的研究結果,現在應該都已經修復。

關於RESTful API安全

關於Oauth安全原則

Redirect_uri全路徑驗證,避免URL跳轉出現問題;

狀態參數State要隨時銷燬;

獲取訪問Token時候,要驗證App 密串;

對回調URL進行跳轉校驗等。

用戶輸入安全:

應用程序維護中有一條規則安全性軍規:"絕不信任任何用戶的輸入"。這也適用於API的安全。現在,大多數情況下,Web應用程序都對輸入進行過濾,但是往往會忽略對來自API的數據進行過濾。比如我們舉一個例子:Jetspeed 2.3.1前版本用戶管理REST服務的漏洞CVE-2016-2171:

關於RESTful API安全

構造用戶管理 REST API 創建用戶chonchong:

關於RESTful API安全

然後將用戶提升為管理員權限

關於RESTful API安全

還可能有sql注入或者xxl注入的漏洞,比如dotCMS的sql注入漏洞

關於RESTful API安全

安全原則:戶輸入嚴格過濾。

RESTful API進行拒絕式攻擊(DDOS,CC)

還有一種常見的攻擊是對API做ddos攻擊。ddos攻擊很容易,只需對API接口進行循環調用即可。由於獲取數據很慢,耗時,如果服務端對訪問數量和頻率沒有控制的話,很容易就會造成cc攻擊。很容易一條腳本、無需肉雞,無需帶寬就能讓你的服務在短時間內爆掉。

比如,下面我們展示一個通過WordPress的API爆破賬號和密碼的python腳本:

關於RESTful API安全

大多數REST API服務供應者,都會每個用戶/Token數做限制。速率限制還可以防止暴力破解攻擊(比如上面例子)。

安全原則:限制請求併發數,限制用戶訪問請求的頻率。


分享到:


相關文章: