首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何防止任意客户端应用程序使用匿名网络API?

如何防止任意客户端应用程序使用匿名网络API?
EN

Stack Overflow用户
提问于 2011-03-17 00:16:18
回答 4查看 22K关注 0票数 63

如果你已经问过并回答了这个问题,我很抱歉;我四处看看,但没有找到我想要的东西。

--

  1. 假设我在http://example.com/的web应用程序在http://api.example.com/上使用一个私有的、无文档的web来获取数据,例如通过XHR或JSONP。
  2. 另外,假设这个web应用程序是匿名的-它不需要用户登录。
  3. 由于客户机和服务器之间存在通信,任何人都可以打开Fiddler等来查看确切的请求和响应,更不用说检查客户端JS代码了。

在这种情况下,如何防止某人在非web客户端应用程序中使用您的API?例如,iPhone应用程序,或服务器端。

据我理解,第2点删除了类似OAuth的选项,第3点删除了例如API密钥甚至SSL的选项。

我曾经考虑过像基于时间的令牌或秘密盐类,它们在第一次加载时就被注入到页面中,但是iPhone应用程序可以很容易地在发出API请求之前偷偷地加载您的网页。

那么,除了普通的模糊--通过默默无闻的安全,还有什么办法吗?

--

如果所有这些都太抽象,下面是一个简单的例子:

Google.com通过一些私有和无文档的API获取其自动完成的数据,但在网络上是开放的。有什么能阻止我在我的iPhone应用中使用它呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-03-19 03:56:26

您不能阻止人们复制您的客户端代码或重播网络流量。

多亏了同源政策,其他web应用程序无法从客户端访问您的API。他们将不得不通过服务器代理他们的请求,这意味着这些请求将来自少数容易识别的IP地址,您可以暂时将其列入黑名单。

至于桌面和移动应用程序,你没什么可以做的。我的建议是在他们成为问题之前不要担心他们。

尽管如此,做好准备并不伤人。如果您想避免昂贵的法律纠纷,您可以做的一件事就是不时地更改您的API方法签名。浸出应用程序可以修复,但它们的声誉将持续下降。

票数 33
EN

Stack Overflow用户

发布于 2012-09-06 06:43:18

身份验证也不能防止API的滥用。只要客户端能够正确地与您的系统进行身份验证,他就可以使用他/她选择的任何客户端。只有客户端和服务器都是安全的,并且连接是安全的,才能避免滥用。

如果问题是滥用,那么一个简单的节流解决方案就足够了。

票数 6
EN

Stack Overflow用户

发布于 2011-03-17 02:18:35

如果您的客户端有隐藏的代码,您可以不按您的建议做,使用盐类、ip地址和基于时间的值,对它们进行加密,然后在服务器端执行相同的操作吗?这基本上就是mod_auth_tkt所做的,而且它工作得很好。或者这是否构成身份验证?

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5333368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档