如果已经询问并回答了这一点,请表示歉意;我找了很多,但还没找到我要问的问题。
--
>
假设我位于http://example.com/的web应用程序使用位于http://API.example.com/的私有且未记录的web API来获取数据,例如通过XHR或JSONP。
还假设这个web应用程序是匿名的--它不需要用户登录。
由于客户机和服务器之间存在通信,任何人都可以打开Fiddler等来查看准确的请求和响应,更不用说检查客户机端的JS代码了。
在这种情况下,如何防止有人在非Web客户端应用程序中使用您的API?例如。iPhone应用程序,或者服务器端。
据我所知,第2点删除了OAuth之类的选项,第3点删除了API密钥甚至SSL之类的选项。
我考虑过基于时间的令牌或在首次加载时注入页面的秘密盐之类的事情,但iPhone应用程序可以在发出API请求之前轻松地秘密加载您的网页。
那么,除了简单的模糊之外,还有什么办法--通过模糊来实现安全吗?
--
如果这些都太抽象,下面是一个简单的例子:
Google.com通过一些API获取自动完成的数据,这些API是私密的,没有文件记录的,但在网络上是开放的。有什么能阻止我在iPhone应用程序中使用它呢?
您无法阻止人们复制您的客户端代码或重播网络流量。
由于相同的起源策略,其他web应用程序不能从客户端访问您的API。他们将不得不通过服务器代理他们的请求,这意味着这些请求将来自少数容易识别的IP地址,你可以暂时将其列入黑名单。
至于桌面和移动应用,你能做的也不多。我的建议是在它们成为问题之前不要担心它们。
话虽如此,做好准备也无伤大雅。如果你想避免昂贵的法律战,你可以做的一件事就是不时地更改你的API方法签名。浸出应用可以修复,但它们的声誉将稳步下降。
身份验证也不能防止API的滥用。只要客户端能够正确地与您的系统进行身份验证,他就可以使用他/她选择的任何客户端。只有客户端和服务器都是安全的,连接也是安全的情况下,您才能避免滥用。
如果问题是滥用,那么一个简单的节流解决方案可能就足够了。
如果没有API密钥或某种形式的授权,那么试图阻止未经授权的客户访问您的服务将是一场失败的战斗。
你可以嗅出很多东西,但硬道理是大多数都是很容易伪造的。
您是否控制另一个web服务?另外,如果您的web应用程序(http://example.com/
)通过XHR或JSONP访问API(http://API.example.com/
),您是否可以通过使用库(如cURL)来代理服务器上的数据以获取数据,然后使其在站点上可用。然后,您可以以您认为合适的任何方式控制对它的访问。