如何防止任意客户端应用程序使用您的匿名Web API?

Ase*_*ore 53 security api web-applications

如果已经被要求和回答,请道歉; 我环顾了一堆,但还没找到我正在问的问题.

-

  1. 假设我在http://example.com/上的网络应用程序使用http://api.example.com/上的私有和未记录的Web API 来获取数据,例如通过XHR或JSONP.

  2. 另外,假定这个Web应用程序是匿名的-它并没有要求用户登录.

  3. 由于客户端和服务器之间存在通信,任何人都可以打开Fiddler等来查看确切的请求和响应,更不用说检查客户端JS代码了.

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

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

我已经考虑过在第一次加载时注入页面的基于时间的令牌或秘密盐等内容,但iPhone应用程序可能很容易在发出API请求之前秘密加载您的网页.

那么除了简单的混淆之外还有什么方法 - 通过默默无闻的安全性?

-

如果所有这些都过于抽象,这里有一个简单的例子:

Google.com通过一些私有且未记录的API获取其自动完成数据 - 但在网络上打开.什么阻止我在我的iPhone应用程序中使用它?

Ric*_*ole 25

您无法阻止人们复制客户端代码或重放网络流量.

由于源策略相同,其他网络应用无法从客户端访问您的API.他们必须通过服务器代理他们的请求,这意味着这些请求将来自一些易于识别的IP地址,您可以暂时将其列入黑名单.

对于桌面和移动应用程序,您无能为力.我的建议是在问题出现之前不要担心它们.

也就是说,做好准备并没有什么坏处.如果您想避免昂贵的法律纠纷,您可以做的一件事就是不时更改您的API方法签名.浸出应用程序可以修复,但其声誉将稳步下降.


小智 5

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

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