2010-06-28 74 views
3

我有一個簡單的web-API可通過HTTP訪問,其中一些相應的移動應用程序正在讀取該數據。現在有人反編譯應用程序/嗅探HTTP流量,將網址提供給我的Web API並構建自己的客戶端,就像我的一樣。保護web-API訪問的安全

我如何確保只爲我自己的客戶訪問我的API?即使有人想到反編譯我的應用程序。

服務器&客戶端代碼更改是一個選項!

回答

3

服務器&客戶端代碼更改是一個 選項!

首先,你不能完全防止它(沒有法律行爲:)。使用SSL/TLS,這將有助於嗅探可能性。

如果應用程序直接從您的服務器下載(而不是通過應用程序商店/第三方),您可以保護它多一點。當用戶下載應用程序時,請確保用戶已通過身份驗證,生成密鑰,將其包含在應用程序中,並在與該用戶的所有進一步通信中使用它。黑客/小偷可以模仿這一點,但他們需要通過他們的服務器來模擬應用程序的登錄和下載 - 您可以找到並阻止它。

2

使用TLS(SSL的後繼者)。

總之,沒有人能夠嗅探流量,因爲它會被加密。基本版本只包含一個服務器證書 - 創建一個證書(自簽名開始)並讓服務器使用。會發生什麼事(我不會去到握手細節):

  • 的客戶端發送請求
  • 服務器響應其公鑰
  • 客戶端產生一個對稱密鑰(使用AES或3DES ),使用服務器的公鑰(RSA)對其進行加密,並將其發送到服務器
  • 服務器解密對稱祕密密鑰(只有擁有私鑰的服務器可以解密它)
  • 通信繼續每個消息(請求/響應)都使用密鑰進行加密安全地轉移

大部分情況都是由您將使用的API處理,但很高興知道事情是如何發生的。

1

簡答:這是軍備競賽的開始。您可以在您的對手進行反向工程和重新開發時混淆和保護,或者您可以專注於改進客戶端軟件,以使用戶寧願使用您的軟件而不是您的「對手」軟件。我認爲,如果你的客戶是更好的工具,那麼你的用戶就會使用你的客戶。如果您的競爭對手比您做得更好,請注意。

較長的答案:每下載一個客戶端時,生成一個客戶端x.509證書,用一個CA密鑰簽名。配置您的Web服務器以在每次請求時要求並驗證客戶端證書。

您的一個合法用戶可能會將其客戶證書給予您的對手。他們可能會將一個,十個,一千個不同的合法獲得的證書烘焙到他們的軟件中,但是當您發現他們時,您可以將每一個證書燒掉(將證書撤銷列表發佈到您的Web服務器在驗證客戶端時使用的證書撤銷列表) 。然後處理在鑰匙停止工作時沮喪的單個最終用戶。

2

如何驗證Web請求?

如果除非通過HTTPS(這將是安全的)發送流量,否則存在流量被嗅探的風險,基本的HTTP認證顯然是不夠的。

還有很多其他方法 - 基於挑戰的機制(例如摘要認證),客戶端證書和SSL。

它的確是一個問題,哪個解決方案造成的痛苦最小 - 除非您設置了您的證書頒發機構(只要您不希望世界接受您的證書,那麼它相當簡單),SSL證書就會花錢,編寫代碼以實現基於共享祕密的挑戰/散列。

或簡單地將URL訪問(通過.htaccess)限制爲一組固定的IP地址(可選使用IPSEC進行驗證)。