1

我使用 getJSON 将数据从一个域发送到另一个域。

示例如下: 域 A (www.a.com) 使用 jQuery getJSON() 将数据发送到域 B (www.b.com) 域 B 包含用于解析数据的所有 php 脚本。

出于安全原因,我想确保数据发送者是域 A 而不是其他域。我阅读了很多帖子并进行了搜索,发现 $_SERVER['HTTP_REFERER'] 用于 php。但是,我注意到很多人说这不是最好的方法,并且一些浏览器不支持它。

然后我遇到了另一个使用 cookie 和访问令牌的说法,这让我更加困惑。好吧,我希望有人能够指出我正确的方向。

这是我用来将数据发送到 dmoain B 的 jquery 脚本

$.getJSON('b.com/parse.php?data=' + data +'&callback=?', function(data) {
//do something
});
4

2 回答 2

0

我想确保数据发送者是域 A 而不是其他人

无法可靠地检测请求是否由运行在特定域上托管的页面中的 JavaScript 触发。

使用 cookie 和访问令牌让我更加困惑

这是一种间接的方法。本质上,该过程将像这样工作:

  1. 两台服务器中的一台生成访问令牌(以及到期时间)
  2. 它将该令牌发送到另一台服务器
  3. 托管应用程序的服务器将该令牌发送给客户端
  4. 客户端向托管数据的服务器发出请求,并将该令牌包含在 URI 中
  5. 托管数据的服务器识别令牌并授权客户端(可能设置 cookie 以便令牌自动保留)

令牌仍然可以从应用程序中提取,因为它必须提供给客户端。但是,这必须由对客户端具有完全访问权限的人来完成,因此无法由想要访问您的数据的第三方网站来完成。

这样的网站可以访问托管应用程序的站点,获取标识令牌,然后访问托管数据的站点。有办法防御这种情况……</p>

如果服务器正在向数据站点发出请求,那么它可能会从给定的 IP 地址发出异常大量的请求。您可以对其进行速率限制。(然后他们可以通过循环访问不同的源 ip 来解决这个问题)。

如果请求是由 Web 浏览器发出的,那么令牌请求将来自与数据请求不同的 IP 地址。您可以将令牌授权锁定到给定的 IP 地址。但是,对于通过代理服务器访问的用户(例如,相当多的移动用户和使用 AOL 的人(上次我听说任何关于 AOL 的服务器是如何配置的)),这将中断。

于 2012-10-05T11:08:19.180 回答
-1

$_SERVER['HTTP_REFERER'] 更好,因为它的服务器端。

于 2012-10-05T10:58:55.133 回答