如果我们尝试设置以前安全的cookie,浏览器会忽略Set-Cookie响应标头



我发现了一个奇怪的问题,不知道需要应用什么解决方法。

最简单的安全改进之一是将所有 Cookie 设置为"仅限 HttpOnly 和 Secure"。我知道,如果您在非安全模式下使用安全cookie(即方案是HTTP(打开一个网站,那么该cookie将被忽略。 但我们的情况如下。

假设有一个 URL 可以登录:contoso.com/AutoLogin/

如果我在HTTPS模式下打开它,那么AUTH cookie就会被设置并且它是安全的:

GET https://contoso.com/AutoLogin/<user token>
Response: Set-Cookie: .ASPXAUTH=<cookie is here>; expires=Fri, 11-Oct-2019 14:51:40 GMT; path=/; secure; HttpOnly

这绝对没问题。我可以在开发工具中看到cookie。 现在,相同的浏览器会话,我正在尝试打开相同的URL,但处于HTTP模式。请求 Cookie 不再具有 AUTH cookie - 由于安全 cookie 的性质,这是清楚和可预测的。

GET http://contoso.com/AutoLogin/<user token>
Response: .ASPXAUTH=<here comes the cookie>; expires=Fri, 11-Oct-2019 14:54:07 GMT; path=/; HttpOnly
  • 这次没有安全标志 - 好的。

但是,未设置 Cookie,并且所有后续请求都没有 AUTH Cookie。 至少在Chrome和Firefox中确认了该行为(未在其他浏览器中检查(。

您可能会注意到,后端是使用 MVC 实现 ASP.NET。 也许,GET请求是AJAX请求的事实可能会有所帮助。

感谢您的帮助。

我发现我关于这个问题的完美文章。总之:

当网站同时通过 http(端口 80(和 https(端口 443(处理请求并且具有 https cookie 的安全标志时,就会发生这种情况。

如果用户首先访问https,网站会设置安全cookie。然后,通过对任何非安全脚本的请求,服务器不会收到会话cookie,因为请求通过非https连接传输。如果端点具有会话机制,它会启动通过标头发送但不存储在浏览器中的新会话(因为浏览器已经有这个名称的cookie - 它只是不发送它(

不同浏览器行为的作者状态 - 有些浏览器允许通过不安全的浏览器覆盖安全的cookie,有些则不允许。

Chrome 71 和 Firefox 64 都可防止在纯 http 上覆盖安全 cookie。我测试了 Edge 42,它的工作方式不同,它将用非安全 cookie 覆盖安全 cookie。Safari 12的工作方式类似于Edge。

我想唯一的解决方案是仅使用一种所需的方式的网站 - 安全与否。

这种情况发生在本地主机开发不同的项目或等
Browser不想用不安全的cookie覆盖cookie,而以前它是安全的。所以; 需要明确的是,您可以转到 Chrome chrome://settings/cookies/detail,搜索您的域,找到 Cookie,然后手动删除它,因为您可能不会在开发者面板应用程序部分、会话和 Cookie 部分中看到它们。因为您当前不在 https 上。

相关内容

  • 没有找到相关文章

最新更新