确保json get来自特定域,php(跨域)

时间:2012-10-04 09:10:38

标签: php jquery json

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

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

出于安全考虑,我想确保数据发送方是域A而不是其他域。 我读了很多帖子并搜索过,我遇到了PHP的$ _SERVER ['HTTP_REFERER']。但是,我注意到很多人说这不是最好的方式,有些浏览器不支持它。

然后我发现另一个使用cookie和访问令牌的说法让我更加困惑。 我希望有人能指出我正确的方向。

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

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

2 个答案:

答案 0 :(得分:0)

  

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

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

  

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

这是一种间接方法。基本上这个过程可以像这样工作:

  1. 两台服务器中的一台生成访问令牌(连同到期时间)
  2. 它将该令牌发送到其他服务器
  3. 托管应用程序的服务器将该令牌发送到客户端
  4. 客户端向托管数据的服务器发出请求,并在URI
  5. 中包含该令牌
  6. 托管数据的服务器识别令牌并授权客户端(可能设置cookie以便令牌自动保留)
  7. 仍然可以从应用程序中提取令牌,因为必须将其提供给客户端。但是,这必须由具有完全访问权限的人员完成,因此无法通过想要访问您的数据的第三方网站来完成。

    这样的网站可以访问托管应用程序的站点,获取标识令牌,然后访问托管数据的站点。有办法防范这个......

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

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

答案 1 :(得分:-1)

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