2014-12-05 65 views
2

我們已經開發了一個帶有REST API和利用它的Android應用程序的服務。我們目前不需要我們的用戶進行身份驗證。如何避免Android中濫用Rest API?

我們想要實現一個簡單的機制來防止隨機的人從應用程序範圍之外調用API,主要是爲了避免濫用會破壞我們計算的數據。

我偶然發現this url,他們建議由有服務器和Android客戶端共享一個祕密,並用它來計算一個HMAC與請求一起通過強制認證。他們聲稱他們在亞馬遜使用這種方法(我還沒有亞馬遜AWS的經驗)。

我正在考慮進行如下操作:

  • 店的服務器,並在Android應用一個共同的祕密
  • 擁有客戶端和(什麼好主意用於混淆它,除了使用ProGuard?)服務器通過普通HTTP進行通信(我們不需要保密,我們將節省一些CPU),並使用HMAC方法將呼叫認證爲「來自合法Android客戶端」。
  • 有時我們可以更新祕密(也許在每個新版本的應用程序)。
  • 如果將來我們需要保密,我們將爲相關的REST調用啓用TLS。

您是否認爲該解決方案可行?有人使用這樣的東西嗎?備擇方案?建議?

謝謝。

+0

1.反轉角色對接口條目進行數據檢查。 2.您必須使用完全安全,否則您可能會遺留問題並節省很多。 – mmprog 2014-12-05 17:06:43

回答

0

我不是安全專家。

您的解決方案聽起來很好,可以保護您免受「隨機人員」的攻擊,但您仍然很容易受到攻擊者的攻擊。存儲在客戶端上的任何東西都可以被挖出並用於對付你。 ProGuard會勸阻一個偶然的攻擊者,但是對於一個專門的攻擊者來說,這只是一個減速帶。

這裏沒有人能告訴你這個安全級別是否足夠好,因爲它很大程度上取決於你的應用程序的細節。最終的決定應該由產品所有者決定。

+0

我們的目標是提供溫和的保護,阻止未真正承諾侵入應用程序的人。當然,如果我們需要確保強(er)級別的身份驗證,我們將使用OAuth或TLS +用戶身份驗證,而不在應用程序中嵌入任何祕密。我個人喜歡這個解決方案,因爲它不需要HTTPS(我們不需要隱藏傳遞的內容),而且很難打破大多數人的想法。 – Giordano 2014-12-05 17:08:36