代码之家  ›  专栏  ›  技术社区  ›  HostileFork says dont trust SE

jQuery.getJSON能否将域的cookies放在它发出的请求的头中?

  •  3
  • HostileFork says dont trust SE  · 技术社区  · 14 年前

    (注:另见相关问题) Can browsers react to Set-Cookie specified in headers in an XSS jquery.getJSON() request? )

    我好像不能设置一个cookie(他的名字是 mwLastWriteTime )在JSON操作的请求头中。请求本身是Freebase MQL教程中的一个简单请求,否则它可以正常工作:

    // Invoke mqlread and call the function below when it is done.
    // Adding callback=? to the URL makes jQuery do JSONP instead of XHR.
    jQuery.getJSON("http://api.sandbox-freebase.com/api/service/mqlread?callback=?",
    {query: JSON.stringify(envelope)},   // URL parameters
    displayResults);                     // Callback function
    

    我本希望我能把这个饼干做成这样的形状:

    $.cookie('mwLastWriteTime', value, {domain: ".sandbox-freebase.com"});
    

    不幸的是,在FireBug中查看传出请求头时,我只看到:

    Host    api.sandbox-freebase.com
    User-Agent  [...]
    Accept  */*
    Accept-Language en-us,en;q=0.5
    Accept-Encoding gzip,deflate
    Accept-Charset  ISO-8859-1,utf-8;q=0.7,*;q=0.7
    Keep-Alive  115
    Connection  keep-alive
    Referer [...]
    

    但是如果我不指定域(或者如果我显式指定请求站点的域),我可以得到 mwLastWriteTime 显示在本地请求的头中。自从 .sandbox-freebase.com 域名拥有这些饼干,难道他们不应该和GET一起旅行吗?还是需要某种变通方法?

    我的代码都是JavaScript,我想设置这个cookie,然后立即调用getJSON。

    2 回复  |  直到 7 年前
        1
  •  5
  •   Sean Vieira    14 年前

    cannot set a cross-domain cookie ,因为这将打开浏览器(因此用户)的XSS攻击。

    引用 QuirksMode.org article 我在上面提到:

    请注意 域将允许cookies交叉 子域。我的饼干不会 由search.quirksmode.org阅读,因为 它的域名是www.quirksmode.org。 当我将域设置为 quirksmode.org,搜索子域 也可以读饼干。我无法设定 cookie域到一个我不是的域 在,我不能使域 www.microsoft.com。只有 quirksmode.org是允许的,在这里 案例。

    如果要使用cookie值进行跨站点请求,则需要在您控制的服务器上设置一个特殊代理,该代理允许您传入要作为cookie值发送的值(可能通过POST参数)。您还需要确保您正确地保护它,以免您的代理成为其他人的私人信息被“解放”的手段。

        2
  •  0
  •   Macy Abbey    14 年前

    您是否正在通过本地主机运行所有测试?你在用IE吗?如果是这样的话,它将强制执行自己的特殊品牌的安全要求,并可能会倾销你的饼干。打开小提琴并使用 http://ipv4.fiddler 绕过那个。

    如果这类欺骗没有发生(看起来您正在使用FireFox),也可能需要明确地将cookie的域设置为与JSON请求的域相同。浏览器不会将为域A设置的cookie发送到对域B的请求。但我不能百分之百确定是这样。