如何为另一个域设置cookie

Ras*_*ihi 146 javascript cookies redirect

假设我有一个名为的网站a.com,当加载此网站的特定页面时,比如页面链接,我喜欢为另一个被调用的网站设置一个cookie b.com,然后将用户重定向到b.com.

我的意思是,在加载时a.com/link我想为其设置一个cookie b.com并将用户重定向到b.com.

我测试了它,浏览器实际上收到了cookie a.com/link,但它没有在重定向请求上发送该cookie b.com.这是正常的吗?

我们可以为其他域设置cookie吗?

qbe*_*220 113

您无法为其他域设置Cookie.允许这会带来巨大的安全漏洞.

您需要让b.com设置cookie.如果a.com将用户重定向到b.com/setcookie.php?c=value

setcookie脚本可以包含以下内容以设置cookie并重定向到b.com上的正确页面

<?php
    setcookie('a', $_GET['c']);
    header("Location: b.com/landingpage.php");
?>
Run Code Online (Sandbox Code Playgroud)

  • 最好在答案中注意到,尽管它有效,但它是不安全的。 (7认同)
  • @TAHA 您的谷歌帐户数据未存储在 cookie 中。该 cookie 包含 Google 服务器上数据库行的密钥。YouTube 使用 oAuth 以安全的方式检索 cookie 的值,然后使用密钥从数据库检索您的数据。 (3认同)
  • 如果此方法不安全,首选方法是什么? (3认同)
  • @ Coder,setcookie功能将导致cookie标头从b.com发送到浏览器。a.com无法从b.com发送Cookie标头。 (2认同)
  • 您怎么说呢,但是youtube正在读取由gmail创建的cookie,以便在youtube上显示其帐户? (2认同)
  • @KaushikRamachandran;它是不安全的,因为参数“c”可能被滥用来包含新的 HTTP 标头,从而导致 HTTP 标头注入 (https://portswigger.net/web-security/host-header)。从这个片段中很难看出。 (2认同)
  • @lowcrawler:检查“setcookie”中的代码以确保值“c”得到适当的清理,以免导致 HTTP 标头注入。 (2认同)

Jon*_*han 50

与最佳答案类似,但不是重定向到页面而是再次返回会导致糟糕的用户体验,您可以在域A上设置图像.

<img src="http://www.example.com/cookie.php?val=123" style="display:none;">
Run Code Online (Sandbox Code Playgroud)

然后在域名B上,即cookie.php中的example.com,您将拥有以下代码:

<?php
    setcookie('a', $_GET['val']);
?>
Run Code Online (Sandbox Code Playgroud)

Hattip到李苏滨

  • 要注意这可能是一个非常糟糕的主意.您通过基本上让任何人发送精心设计的GET请求来将cookie设置为他们想要的任何值,从而规避了故意的cookie保护.我不知道你用那个cookie做了什么,但我希望它不涉及银行余额. (13认同)
  • 不错的黑客... :) (2认同)
  • 如果在这种情况下每个人都可以使用自己的参数调用此域,您可以通过添加另一个参数来增加安全性。使用数据和额外的盐创建一个散列并将其作为参数传递。在您的 cookie.php 中,只需通过重新创建令牌并比较它们来验证 $_GET['val'] 中的数据。 (2认同)
  • 如果您以这种方式发送 GET,您也可以使用 AJAX。 (2认同)

Ond*_*zek 16

Probaly你可以用Iframe它.Facebook可能会使用这种技术.你可以在这里阅读更多相关内容.Stackoverflow使用类似的技术,但使用HTML5本地存储,更多关于他们的博客


Que*_*tin 5

你不能.这将是一个令人讨厌的安全风险.

  • @Timberman — 问题是关于在网站上运行的 JavaScript,**不是**在开发人员工具中**并且**不是**在显式安装的扩展中运行。这将是一个安全风险,因为任何访问“evil-hack.com”的人都可以为“ir-favourite-website.com”设置一个 cookie,从而改变他们对该网站的偏好。 (3认同)

Pat*_*rik 5

无法为其他域设置Cookie.

如果要将数据传递到另一个域,可以将其编码到URL中.

a.com  ->  b.com/redirect?info=some+info (and set cookie) -> b.com/other+page
Run Code Online (Sandbox Code Playgroud)

  • 从URL设置会话cookie是一种安全风险.网址通常会被记录,并允许攻击者窃取用户会话 (4认同)

sto*_*ran 5

如果您拥有a.my-company.comb.my-company.com而不是just a.comb.com则可以为.my-company.com域发布Cookie- 它会被接受并发送到两个域。

  • 除非 my-company.com 位于 [公共后缀黑洞列表](https://github.com/publicsuffix) 中,否则浏览器将默默地忽略所有设置 cookie 的尝试!:'-( (2认同)

Roy*_*ing 5

参见RFC6265

用户代理将拒绝cookie,除非Domain属性为cookie的范围指定一个范围,该范围将包括原始服务器。例如,用户代理将接受来自foo.example.com的Domain属性为“ example.com”或“ foo.example.com”的cookie,但是用户代理将不接受Domain属性为的cookie。 “ bar.example.com”或“ baz.foo.example.com”。

注意:出于安全原因,许多用户代理配置为拒绝与“公共后缀”相对应的域属性。例如,某些用户代理将拒绝“ com”或“ co.uk”的域属性。(有关更多信息,请参见第5.3节。)

但是,尽管不建议使用图像/ iframe的上述解决方法,但不建议这样做。