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

时间:2014-03-30 21:19:52

标签: ios django security

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

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

我是否可以通过其他方式限制对我的特定应用程序的访问?我想通过提供白名单访问权限向其他开发人员开放我的后端服务。但就目前而言,我希望继续访问我们的后端私有。

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

1 个答案:

答案 0 :(得分:6)

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

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

  1. App向Web服务发送请求以进行身份​​验证,并提供API密钥。
  2. Web服务查找API密钥以确定"共享密钥"
  3. Web服务将挑战字符串发送回应用
  4. App使用共享密钥哈希挑战字符串并将其发送回Web服务
  5. Web服务应用相同的哈希并比较答案
  6. 如果哈希比较,则Web服务将会话密钥返回给应用
  7. 应用会发送包含所有后续请求的会话密钥
  8. 在某些时候,您需要使会话密钥无效 - 应用程序注销,超时,请求数量
  9. 要保护此方法免受中间人攻击,您需要通过SSL运行它,并确保您的应用验证服务器证书。

    您还应该实施某种形式的防范暴力尝试,例如在' x'之后锁定API密钥。失败的挑战