2014-03-30 77 views
1

是否可以只接受來自我的應用程序的請求?舉例來說,我有一個叫做'Best App'的iOS應用程序,它使用Django作爲它的後端。我該如何做到這一點,只有來自Best App的請求才被接受,其他所有內容都被拒絕?Django:只接受來自我的應用程序的請求

我正在考慮檢查請求中的'HTTP_USER_AGENT'鍵,如果HTTP_USER_AGENT是'最佳應用',我將允許請求通過。但我最近發現,任何人都可以從Chrome等應用程序修改其USER_AGENT,並請求訪問我們的資源。

是否有任何其他方式可以限制只訪問我的特定應用程序?我想通過提供白名單訪問權限來向其他開發者開放我的後端服務。但現在,我想繼續訪問我們的後端私人。

您對此事的建議和見解非常感謝。

回答

6

良好的應用程序安全解決方案不是微不足道的。您不能使用任何簡單的純文本對象,如HTTP_USER_AGENT。一種常見的方法是「API密鑰」 - 從註冊頁面獲得的密鑰與請求一起提供,但除非將其與其他「祕密」結合使用,否則可以將其簡單複製並由「假」應用程序。

一個合理強大的解決方案將是使用共享密鑰的某種形式的質詢/響應。理論上,一個堅定的攻擊者可以從你的應用中提取你的祕密並使用它,但這需要合理的努力 - 首先他們需要解密你的應用包,然後提取祕密。流程類似於 -

  1. 應用程序向Web服務發送請求以進行身份​​驗證,提供API密鑰。
  2. Web服務查找API密鑰,以確定「共享密鑰」
  3. Web服務將挑戰字符串返回到應用
  4. 應用程序中使用共享密鑰散列挑戰字符串,並將其發送回Web服務
  5. Web服務應用相同的散列和比較回答
  6. 如果哈希值比較,Web服務將返回會話密鑰到App
  7. 應用程序發送的會話密鑰的所有後續請求
  8. 在某些時候,你需要無效會話密鑰 - 無論是pp註銷,超時,請求數量

要保護此方法免受中間人攻擊,您需要通過SSL運行它並確保您的應用驗證服務器證書。

您還應該實施某種形式的防範暴力破解的措施,比如在'x'失敗後鎖定API密鑰

+0

謝謝!這是我正在尋找的答案。 – noahandthewhale

+0

哎呦!差點忘了!再次感謝! – noahandthewhale

+0

你會建議我爲他的類型的場景實現OAuth 2.0嗎? – noahandthewhale

相關問題