2016-01-10 275 views
1

我正在開發一個Android和iOS應用程序,它將使用我在單獨的服務器上開發的RESTful API。應用程序將簡單地戳到端點以更新數據庫中的數據並在需要時檢索信息。我的問題是沒有這樣做,API的架構已經設置,我只需要考慮最安全的方式來實現它。RESTful API身份驗證和安全

我有一個API密鑰系統,要求將API的任何用途與請求配對,以防止沒有密鑰的人訪問API。這很好,但我擔心那些更有決心要突破系統的人。特別是在Android方面,可以反編譯應用程序,並且可以查看(某些)代碼。我很確定可以查看字符串,所以我擔心如果有人反編譯應用程序,他們將獲得API密鑰的位置並能夠訪問該API。

我在尋找使API更安全的建議。我已經考慮在更新信息時將另一個獨特的值與API Key配對,但我不確定這是否也能很好地工作。

任何建議都非常感謝它。

+0

如何跟蹤,如果你使用的所有應用程序的用戶相同的密鑰,其用戶發出請求?如果你爲每個用戶發佈一個唯一的密鑰,看起來你遇到的問題應該不是真正的問題。如果他們以某種方式對你的api進行逆向工程並使用他們的密鑰,他們仍然只能被允許執行他們被允許的執行行爲。 – JimL

+0

每個用戶將有一個唯一的標識號碼,通過其他第三方服務接收。因爲這個號碼可以在一個單獨的應用程序中再次找到,所以我想創建另一個唯一的識別號碼,通過數據庫自動生成。我想這樣會很安全。嗯。 – Jmrapp

+2

我更喜歡一些散列值。如果惡意用戶看到他們的api密鑰是1000135,那麼他們肯定會嘗試1000136等等。 – JimL

回答

0

你說得擔心你的應用程序可以被反編譯。代碼和字符串存儲在清除中。事實上,這是相當微不足道的事情。

我聽說有人在看兩個應用程序:一個包含明文電子郵件服務密碼和用戶名,對垃圾郵件製造者非常有用。另一個公開的「隨機」數字算法允許黑客使用公共交通工具免費生成今天的「隨機」數字並免費乘坐。

您可以通過提高標準:

  • 模糊處理您的代碼的工具。一些工具將提供加密字符串的功能。
  • 使用每次新安裝的新加密密鑰對應用程序中的敏感字符串進行手動加密,拆分加密密鑰並將其隱藏在多個不同位置(例如,在代碼,數據庫中的一部分,一部分在OS部分和應用ACL到外部位置
  • 使用傳輸安全(如TLS),以減少
  • 使用API​​速率限制在服務器上的人在這方面的中間人攻擊風險側
  • 介紹地理位置服務,以查看是否相同的API密鑰是從不同的地點使用,同時