设置cookie交叉起源

时间:2017-09-17 08:53:18

标签: javascript node.js express cookies

有两个域:domain1.comdomain2.comdomain1.com的服务器:

app.get('/',(req,res,next)=>{
    res.redirect('domain2.com/');
})

domain2.com的服务器:

app.get('/',(req,res,next)=>{
    res.cookie("name",'luoxia');
    res.end();
})

我发现Cookie设置为domain1.com,为什么?

我想将Cookie设置为domain2.com。怎么做?

1 个答案:

答案 0 :(得分:1)

无法为其他域设置Cookie。允许这会带来巨大的安全漏洞。 没有跨域cookie这样的东西。您可以在foo.example.com和bar.example.com之间共享cookie,但出于安全原因,不得在example.com和example2.com之间共享。

如果要将数据传递到另一个域,可以将其编码到URL中。或者你可以这样这样的黑客。

将所有Cookie集中在一个域中,

   1. let's say cookiemaker.com When the user makes a request to example.com you redirect him to cookiemaker.com
   2.cookiemaker.com redirects him back to example.com with the information you need

当然,它不是完全安全的,你必须在你的应用程序之间创建某种内部协议才能做到这一点。

最后,如果您在每次请求时都做同样的事情,对用户来说会非常烦人,但如果它只是第一次请求,则会非常烦人。

请参阅RFC6265

  

除非Domain属性,否则用户代理将拒绝cookie   指定包含源服务器的cookie的范围。   例如,用户代理将接受带有域的cookie   属性" example.com"或者" foo.example.com"从   foo.example.com,但用户代理不接受带有的cookie   " bar.example.com"的域属性或者" baz.foo.example.com"。

     

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

     

1https://tools.ietf.org/html/rfc6265#section-4.1.2.3