ios - Django:只接受来 self 的应用程序的请求

标签 ios django security

是否可以只接受来 self 的应用程序的请求?举例来说,我有一个名为“Best App”的 iOS 应用程序,它使用 Django 作为后端。我怎样才能做到只接受来自 Best App 的请求,而拒绝其他所有请求?

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

有没有其他方法可以限制对我的特定应用程序的访问?我想通过授予白名单访问权限向其他开发人员开放我的后端服务。但就目前而言,我想保持对我们后端的私有(private)访问。

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

最佳答案

好的应用程序安全解决方案非常重要。您不能使用任何简单的纯文本对象,如 HTTP_USER_AGENT。一种常见的方法是“API key ”——从注册页面获得的 key 与请求一起提供,但除非您将它与其他一些“ secret ”结合起来,否则它可以被简单地复制并由“假”提供应用程序。

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

  1. 应用向网络服务发送请求进行身份验证,提供 API key 。
  2. Web 服务查找 API key 以确定“共享 secret ”
  3. Web 服务将质询字符串发送回应用
  4. 应用程序使用共享 key 对挑战字符串进行哈希处理并将其发送回网络服务
  5. Web 服务应用相同的散列并比较答案
  6. 如果哈希比较,网络服务返回 session key 给应用
  7. 应用随所有后续请求发送 session key
  8. 在某些时候您需要使 session key 无效 - 应用注销、超时、请求数

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

您还应该实现某种形式的保护以防止暴力尝试,例如在“x”次挑战失败后锁定 API key

关于ios - Django:只接受来 self 的应用程序的请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22750014/

相关文章:

mysql - Django 查询集 : Get unique/first element from ForeignKey field

javascript - 从前端到后端签署 api 调用

java - GSON 漏洞或利用反序列化来避免

database - 在我的数据库中存储私有(private)电子邮件地址

ios - 如何使用MDM访问Apple推送通知的内容?

ios - 代码 : Retrieving the Product Name from a target in command line

ios - 在 UIPageViewController 中使用 2 个不同的 View Controller 作为页面

mysql - 随着添加更多条目,数据库 `ORDER BY` 速度加快

python - 无效的文件名或模式 'wb'

iphone - 不允许在 prepareForDeletion 中执行获取请求?