我有一个与 Apache 2.2 服务器通信的 iOS 应用。我想限制对几个目录的访问,以便只有应用可以访问它们(浏览器无法访问、爬虫无法访问等)。我有什么选择?
答案1
在非标准端口(如 8574)上运行 Apache。这第一步将消除您预期来自机器人和脚本的 99% 的“噪音”。
Apache 中需要的具体配置是mod_authz_host。它允许您根据 Apache 称之为“环境变量”的各种因素(包括用户代理)过滤访问请求。您可以允许自定义用户代理的请求,然后拒绝所有请求。
警告:综上所述,基于用户代理的过滤是不是正确的方法来实现您想要的。服务器端控制只是保护您的应用程序免受未经授权的访问的开始。对 Web 服务(例如您正在开发的服务)进行身份验证应该使用某种 API 密钥来实现。许多 REST API 正是这样做的。如果您不确定如何实现基于密钥的加密,咨询专家(否则承担后果)。
后续:实施公钥加密是正确完成这项工作的众多方法之一。在您深入研究之前,请允许我说,您将面临一个痛苦的世界。查看不可或缺的“一小时内你需要了解的有关密码学的一切”。请注意,他在演讲中六次提到了“咨询密码学家”这句话。最简单的是,您的服务器应该能够对任何请求做出肯定的回答:
- 我能保证这个请求来自iOS应用程序吗?
- 我能保证这个消息没有被篡改吗?
- 我能保证这个用户就是他们所声称的那个用户吗?
- 我能保证该用户有授权做他们要求做的事情吗?
正如您在演示中看到的,即使是像亚马逊这样的知名 API 也并不总是能正确处理这个问题。我相信您的团队需要一位专家,至少要确保应用程序的这一部分正确无误。