2013-05-03 89 views
0

我有一個將內容提供給移動應用的API,並且目前沒有計劃將API用於其他產品。我有兩個主要問題:針對移動應用安全/身份驗證的API

  1. 如何防止某人嗅探API請求併發出他們自己的請求(這不應該是一個公共API)。
  2. 如果不能完全阻止#1,那我該如何限制/限制來自未經批准的消費者的請求?這裏還有其他問題嗎?

對於每個請求使用auth令牌(作爲GET參數傳遞)滿足#2(我可以隨時撤銷它),但我不想在將來更新應用程序以使用不同的令牌。

此外,移動應用程序中沒有用戶身份驗證,並且API是使用PHP編寫的。

這方面的最佳做法是什麼?

回答

3

以下是一些可以幫助保持API私密性的建議。

  • 使用TLS阻止隨便的數據包嗅探。
  • 確保您的客戶端驗證服務器證書以防止MITM攻擊。
  • 在客戶端代碼中加密或混淆身份驗證令牌,因此它不會像字符串轉儲那樣明顯暴露。

但最終,如果有人真的想訪問您的API,他們將 - 通過逆向工程您的客戶端代碼或more complex data interception techniques。您希望的最好的方式是阻止普通用戶訪問企圖。

1
  • 如何防止某人嗅探API請求併發出他們自己的請求(這不應該是一個公共API)。

我會迴應以前的答案,您應該使用TLS作爲理所當然的事情,以加密電線上的流量以防止嗅探。但是我想補充一點,您還需要阻止「捕獲 - 重放」攻擊,攻擊者可能會重新發送他們可能已經獲得的以前的消息(例如,從客戶端日誌中),儘管使用了TLS。在這種情況下,如果您在請求中使用隨機數(表示「號碼一次」)和/或時間戳,使用HMAC簽名,則可以檢測並阻止重播的API請求。我在我的博客上寫了一個這樣的例子:http://www.soatothecloud.com/2011/02/securing-apis.html。例如,亞馬遜的API使用這種方法。

  • 如果防止#1是不可能完全,那麼如何從未經批准的消費者 極限/油門請求?這裏有其他 問題嗎?

以及HMAC簽名(上面),也可以考慮監測呼入的IP地址範圍,設備信息(表示裝置類型例如頭 - 的Android VS iOS的等),以及其它因素可用於將多個請求鏈接到特定客戶端,然後在API級別應用策略。

完全披露我爲API管理/ API網關供應商(Axway)工作,但上面的信息應該是通用的。