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

是否有可能只接受来自我的应用程序的请求? 说例如我有一个名为“最佳应用”的iOS应用程序,它使用Django作为其后端。 我怎么能这样做,只有来自最佳应用程序的请求被接受,其他的一切都被拒绝?

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

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

您对此事的build议和见解非常感谢。

良好的应用程序安全解决scheme是不平凡的。 您不能使用任何简单的纯文本对象,如HTTP_USER_AGENT。 一种常见的方法是“API密钥” – 从注册页面获得的密钥与请求一起提供,但是除非您将其与其他“秘密”结合,否则可以简单地复制并由“假”应用程序。

一个合理的强大的解决scheme是使用共享秘密的某种forms的挑战/回应。 一个坚定的攻击者理论上可以从你的应用程序中提取你的秘密并使用它,但这需要合理的努力 – 首先他们需要解密你的应用程序包,然后提取秘密。 stream量就像 –

  1. 应用程序发送请求到Web服务进行身份validation,提供API密钥。
  2. Web服务查找API密钥以确定“共享密钥”
  3. Web服务将挑战string发送回应用程序
  4. 应用程序散列使用共享密钥挑战string并将其发送回Web服务
  5. Web服务应用相同的散列并比较答案
  6. 如果散列比较,Web服务返回会话密钥到应用程序
  7. 应用程序发送会话密钥与所有后续请求
  8. 在某些时候,您需要使会话密钥无效 – 无论是应用程序注销,超时,请求数量

为了防止这种中间人攻击,您需要通过SSL运行它,并确保您的应用validation服务器证书。

您还应该实施某种forms的防范暴力破解的措施,例如在“x”失败的问题后lockingAPI密钥