2012-10-06 40 views
0

我正在爲它們構建一套移動應用程序和相應的Web服務。爲了確保從應用程序到Web服務的連接(達到合理的級別),我使用了雙腿OAuth方法,每個應用程序使用唯一的使用者密鑰/祕密。驗證API響應完整性

我的問題是如何驗證移動應用收到的響應實際上來自我的服務器。例如,如果我有一個端點來確認用戶是否可以通過傳入一組布爾值來訪問某些功能,據我所知,沒有什麼可以阻止某人修改其主機文件併發回一個欺騙性響應,指示他們有權訪問所有內容。它是否正確?

我建議的解決方案是讓應用程序存儲服務器也知道的響應祕密。當服務器發送它的響應時,它會生成與祕密相結合的數據的散列。應用程序然後重新生成哈希並檢查匹配。這樣,用戶只有在知道存儲在應用程序中的祕密的情況下才能劫持該請求。

有沒有解決這個問題的最佳實踐?

只需在HTTPS下託管Web服務即可解決問題,還是會有人能夠複製Web服務併發回欺騙響應?

非常感謝

回答

0

HTTPS被設計來解決這個確切的問題,並且做得非常好(當然,客戶端不能被欺騙,信任不應該被信任的證書的假設 - 這不應該成爲大多數現實生活中的移動應用場景的一個問題)。 我會堅持使用HTTPS,而不是試圖發明自己的解決方案。具體而言,在您提出的解決方案中,攻擊者只需掌握應用的一個副本即可 - 逆向工程,提取祕密,然後攻擊所有其他副本。

+0

謝謝尤金。我希望你的評論會得到一些贊成票,以保證我是安全的解決方案。看到它證實了我的懷疑,我會接受它。如果人們可以幫助確認,但這很好。謝謝。 – Mark

0

您可以使用HMAC來計算兩端的結果並比較結果,如果結果相同,則表示它來自服務器。一個缺點是,攻擊者是如此堅定,能夠逆向工程你的應用程序,並提取在HMAC中使用的密鑰,然後這將結束。有很多方法可以避免這種情況,但它都基於您的應用程序或數據的價值。最好的解決方案是使用數字簽名和公鑰加密。我不會推薦https,因爲即使證書鎖定不是非常有效,如果攻擊者高度確定,但它仍然基於您應用的價值,它可以輕鬆繞過。