我有一個簡單的web-API可通過HTTP訪問,其中一些相應的移動應用程序正在讀取該數據。現在有人反編譯應用程序/嗅探HTTP流量,將網址提供給我的Web API並構建自己的客戶端,就像我的一樣。保護web-API訪問的安全
我如何確保只爲我自己的客戶訪問我的API?即使有人想到反編譯我的應用程序。
服務器&客戶端代碼更改是一個選項!
我有一個簡單的web-API可通過HTTP訪問,其中一些相應的移動應用程序正在讀取該數據。現在有人反編譯應用程序/嗅探HTTP流量,將網址提供給我的Web API並構建自己的客戶端,就像我的一樣。保護web-API訪問的安全
我如何確保只爲我自己的客戶訪問我的API?即使有人想到反編譯我的應用程序。
服務器&客戶端代碼更改是一個選項!
服務器&客戶端代碼更改是一個 選項!
首先,你不能完全防止它(沒有法律行爲:)。使用SSL/TLS,這將有助於嗅探可能性。
如果應用程序直接從您的服務器下載(而不是通過應用程序商店/第三方),您可以保護它多一點。當用戶下載應用程序時,請確保用戶已通過身份驗證,生成密鑰,將其包含在應用程序中,並在與該用戶的所有進一步通信中使用它。黑客/小偷可以模仿這一點,但他們需要通過他們的服務器來模擬應用程序的登錄和下載 - 您可以找到並阻止它。
使用TLS(SSL的後繼者)。
總之,沒有人能夠嗅探流量,因爲它會被加密。基本版本只包含一個服務器證書 - 創建一個證書(自簽名開始)並讓服務器使用。會發生什麼事(我不會去到握手細節):
大部分情況都是由您將使用的API處理,但很高興知道事情是如何發生的。
簡答:這是軍備競賽的開始。您可以在您的對手進行反向工程和重新開發時混淆和保護,或者您可以專注於改進客戶端軟件,以使用戶寧願使用您的軟件而不是您的「對手」軟件。我認爲,如果你的客戶是更好的工具,那麼你的用戶就會使用你的客戶。如果您的競爭對手比您做得更好,請注意。
較長的答案:每下載一個客戶端時,生成一個客戶端x.509證書,用一個CA密鑰簽名。配置您的Web服務器以在每次請求時要求並驗證客戶端證書。
您的一個合法用戶可能會將其客戶證書給予您的對手。他們可能會將一個,十個,一千個不同的合法獲得的證書烘焙到他們的軟件中,但是當您發現他們時,您可以將每一個證書燒掉(將證書撤銷列表發佈到您的Web服務器在驗證客戶端時使用的證書撤銷列表) 。然後處理在鑰匙停止工作時沮喪的單個最終用戶。
如何驗證Web請求?
如果除非通過HTTPS(這將是安全的)發送流量,否則存在流量被嗅探的風險,基本的HTTP認證顯然是不夠的。
還有很多其他方法 - 基於挑戰的機制(例如摘要認證),客戶端證書和SSL。
它的確是一個問題,哪個解決方案造成的痛苦最小 - 除非您設置了您的證書頒發機構(只要您不希望世界接受您的證書,那麼它相當簡單),SSL證書就會花錢,編寫代碼以實現基於共享祕密的挑戰/散列。
或簡單地將URL訪問(通過.htaccess)限制爲一組固定的IP地址(可選使用IPSEC進行驗證)。