【问题标题】:Restrict access to web service to only allow mobile clients限制对 Web 服务的访问,只允许移动客户端
【发布时间】:2012-12-16 08:41:01
【问题描述】:

我目前正在构建一个移动应用程序(最初是 iOS),它需要一个后端 Web 服务来与之通信。

由于此服务将公开我只想由我的移动客户端访问的数据,因此我想限制对该服务的访问。

但是,我对如何实现这一点有点怀疑。由于我的应用不需要身份验证,因此我不能只使用这些凭据对服务进行身份验证。不知何故,我需要能够确定请求是否来自受信任的客户端(即我的应用程序),这当然会导致人们认为可以只使用证书。但是这个证书不能从应用程序中提取并因此被滥用吗?

目前我的应用程序是基于 iOS 的,但后来 android 和 WP 也会出现。

我希望在 nodejs 中开发的 Web 服务,虽然这不是最终决定 - 但是它将是一个 RESTful 服务。

感谢任何关于最佳实践的建议!

【问题讨论】:

  • 我会走证书路线...但实际上任何坚定的黑客都可以对其进行逆向工程或欺骗用户代理字符串以显示为移动设备等。
  • 正是我的想法——这并不能真正阻止任何人访问我的服务。我只是认为今天的所有应用程序已经发展了某种最佳实践,而我只是不知道。我想我所能做的就是让它变得更加困难 - 但是,当坚定的黑客(甚至可能是唯一一个通过在应用程序背后识别我的服务的人)轻松获得访问权限时,为什么还要打扰呢。 ..?
  • 基于 SSL 的通信 + 公钥签名 = 非常可靠的通信
  • 我觉得不可能,但是如果你能得到发送设备的MAC,你就可以对它进行分类。

标签: ios web-services security authentication


【解决方案1】:

简单的答案:您不能阻止任何人从非移动客户端访问您的网站。但是,您可以让它变得更难。

简单:

  • 发送非标准 HTTP 标头
  • 设置一些唯一的查询参数
  • 发送一个有趣(或不那么有趣)的用户代理字符串
  • (您可能还能想出更多)

困难:

  • 实施质询/响应协议以识别您的客户
  • (Ab)使用 HTTP 作为您自己的加密内容的传输方式
  • (您可能还能想出更多)

当然,任何人都可以提取数据、反编译代码、重放 HTTP 请求等等。但在某些时候,能够访问免费的 Web 应用程序并不值得为您的应用程序进行逆向工程所需的努力。

然而,这里有一个更基本的问题。与其他客户一起访问您的网站会有什么危害?你没有说;如果没有这些信息,基本上不可能推荐合适的解决方案。

【讨论】:

  • 感谢Matthias 非常彻底的回答!该应用程序基本上是一种购物应用程序,其中服务公开可用的商品,应用程序使用这些商品并将其呈现给最终用户。我限制访问的原因是 1) 防止竞争对手取消我的报价,以及 2) 避免有恶意的人篡改我的分析数据,因为对服务的每个请求都将保留用于各种分析目的(在这种情况下可以成为宝贵的资产)。
  • 抓取(不是抓取)或类似的活动不是移动与任何问题。您应该添加代码以在服务器端检测这些活动。例如,普通用户不会每秒点击 10 个优惠,他们倾向于以某种主题的顺序浏览您的网站,而不是随机或深度或广度优先的顺序。您可能还想提高访问您网站的门槛(电子邮件注册、验证码)。
  • 我同意 - 这种检测机制可能是解决我的问题的最有用的方法。感谢您的帮助!
  • 是的——听起来某种服务器端反欺骗启发式方法可能是你最好的选择。
  • @klausk:不客气。注意:您可能想要对有用的答案进行投票。 ;-)
猜你喜欢
  • 2012-07-06
  • 2015-09-13
  • 1970-01-01
  • 2011-08-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-10
  • 1970-01-01
  • 2012-09-17
相关资源
最近更新 更多