即使设置SameSite = None,Safari也不会发送cookie;安全

时间:2019-10-23 14:57:14

标签: javascript cookies safari setcookie samesite

我们的应用程序使用cookie来记住用户登录。我们进行的每个auth API调用,浏览器都会将服务器设置的HTTPonly cookie附加到API请求中,并进行身份验证。莫哈韦沙漠(Mojave)发布后,这种行为似乎在野生动物园中被打破。

我了解了safari实现的跨站点cookie安全性,并且我们的服务器团队在设置cookie时添加了SameSite=None;Secure。即使在那之后,它仍然不起作用。

Set-Cookie: my_cookie=XXXXX; path=/; secure; HttpOnly; SameSite=None

请提供建议或提供实际找到解决方案的人员的链接。

3 个答案:

答案 0 :(得分:2)

MacOS 10.14上的Safari版本和iOS 12上的所有浏览器均受this bug的影响,这意味着SameSite=None被错误地视为SameSite=Strict,例如最严格的设置。

我在SameSite cookie recipes上发布了有关以下任一内容的指南:

  • 使用两组Cookie来说明支持SameSite=None; Secure和不支持SameSite=None的浏览器。
  • 嗅探用户代理for incompatible browsers而不为这些请求提供<?php include('connection.php'); if(isset($_POST["export"])){ header('Content-Type: text/csv; charset=utf-8'); header('Content-Disposition: attachment; filename=loaddata.csv'); $output = fopen("php://output", "w"); fputcsv($output, array( 'row number', 'Position ID', 'Description', 'firstname', 'lastname', 'country ', 'PhoneNumber')); include ("loaddata.php") $sqlcsv = "SELECT * FROM employeeTable"; $resultcsv = mysqli_query($conn,$sqlcsv) or die('Invalid query sqlcsv: ' . mysqli_error()); while ($row = mysqli_fetch_assoc($resultcsv)) { fputcsv($output, $row); } fclose($output); } ?>

答案 1 :(得分:2)

这也是 Safari 14 中的一个问题。默认情况下,Safari 不再发送第三方 cookie。这是因为他们引入了隐私首选项:“防止跨站点跟踪”,默认情况下是打开的。因此,如果您使用 SameSite=None; Secure 设置 cookie,它们仍然不会被设置和跨域发送。

答案 2 :(得分:0)

对于用Ruby编码的应用程序(特别是Rails,Sinatra或Rack上的任何东西),RailsSameSiteCookie gem可以很好地解决此问题和相关问题。代码看起来像pseudocode in the Chromium discussion的近似翻译,而没有易碎的正则表达式。