是否可以将API限制为仅限一个Web界面/应用程序?

问题描述:

我对跨产品政策有疑问。是否可以将API限制为仅限一个Web界面/应用程序?

我有一个Web应用程序,获取数据,通常以JSON格式,通过AJAX。

当Web应用程序初始化,独特的“关键”或“令牌”从服务器通过AJAX创建并发送到客户端,作为一个平均值来识别它。每次ajax调用都会发送令牌用于验证目的。如果在两个小时内未验证,则PHP脚本将其删除,并且用户需要再次对其进行身份验证。

如果用户发送另一个Ajax呼叫(即,如果有活动与关联的令牌),令牌将其过期2小时。

每次调用,我验证令牌,然后处理请求。一切运作良好,但我的问题是安全导向。由于令牌存储在客户端(非常粗糙,如window.token = 'YTM0NZomIzI2OTsmIzM0NTueYQ==';),恶意用户不可能检查代码,复制包括令牌在内的JavaScript,并创建另一个可访问相同令牌的应用程序数据?

+2

简而言之:是的。 :) – deceze 2012-02-29 00:55:53

+2

是的,你无能为力。 – SLaks 2012-02-29 00:56:13

+0

我不知道PHP,但是它不包含会话功能吗? – 2012-02-29 00:57:40

Since the token is stored client-side (very crudely, like window.token = 'YTM0NZomIzI2OTsmIzM0NTueYQ==';), won't it be possible for malicious users to inspect the code, copy the JavaScript including the token, and create another app that will access the same data?

是的。

可能更令您感到困扰的是:即使您的令牌存储在客户端甚至都无关紧要 - 他们甚至可以使用您公开给用户的相同API登录。登录(如果你觉得你没有登录API,因为它是一个表单提交或类似的东西,你在愚弄自己 - 表单POST是一样多的“API”为别的......和可以很容易地复制到其他地方)。

跨域的东西已经很少做任何事情 - 因为这是一个浏览器的客户端限制 - 用于用户的保护 - 不是你的。我可以通过桌面或服务器进行任何HTTP请求。我甚至可以设置一项服务,该服务允许我将所有对我的服务提出的请求代理到您的服务中......所以浏览器中的跨域安全性对您没有任何帮助。

+0

神圣安全蝙蝠侠!谢谢你的确切答案。 – 2012-02-29 02:10:15