Django:只接受来自我的应用程序的请求

noa*_*ale 2 security django ios

是否有可能只接受我们来自我的申请的请求?比方说,我有一个名为'Best App'的iOS应用程序,它使用Django作为其后端.我怎样才能使得只有来自Best App的请求被接受而其他一切被拒绝?

我在考虑检查请求中的'HTTP_USER_AGENT'键,如果HTTP_USER_AGENT是'Best App',我将允许请求通过.但我最近发现,任何人都可以从Chrome等应用程序修改其USER_AGENT,并请求访问我们的资源.

有没有其他方法可以限制我的特定应用程序访问?我想通过提供白名单访问权限向其他开发人员开放我的后端服务.但是现在,我想继续访问我们的后端私有.

非常感谢您对此事的建议和见解.

Pau*_*w11 6

良好的应用程序安全解决方案并非易事.您不能使用任何简单的纯文本对象,如HTTP_USER_AGENT.一种常见的方法是"API密钥" - 其中从注册页面获得的密钥与请求一起提供,但除非您将其与其他"秘密"结合使用,否则可以通过"假"来轻易地复制和提供密钥.应用程序.

一个相当强大的解决方案是使用共享秘密的某种形式的质询/响应.理论上,一个坚定的攻击者可以从你的应用程序中提取你的秘密并使用它,但这需要合理的努力 - 首先他们需要解密你的应用程序包然后提取秘密.流程是这样的 -

  1. App向Web服务发送请求以进行身份​​验证,并提供API密钥.
  2. Web服务查找API密钥以确定"共享密钥"
  3. Web服务将挑战字符串发送回应用程序
  4. App哈希使用共享密钥挑战字符串并将其发送回Web服务
  5. Web服务应用相同的哈希并比较答案
  6. 如果哈希比较,则Web服务将会话密钥返回给app
  7. App发送包含所有后续请求的会话密钥
  8. 在某些时候,您需要使会话密钥无效 - 应用程序注销,超时,请求数

要保护此方法免受中间人攻击,您需要通过SSL运行它并确保您的应用程序验证服务器证书.

您还应该实施某种形式的保护措施来防止暴力攻击,例如在"x"失败的挑战后锁定API密钥