Как исправить предупреждение «установите для SameSite cookie значение none»? Расширение Chrome

41

Я создал расширение Chrome и из popup.js я назвал PHP скрипт (используя Xhttprequest), который читает cookie. Нравится:

$cookie_name = "mycookie";

if(isset($_COOKIE[$cookie_name]))
{
    echo $_COOKIE[$cookie_name];
}
else{
    echo "nocookie";
}

Но я получаю это предупреждение при ошибках в расширениях.

Файл cookie, связанный с межсайтовым ресурсом в (Здесь мой домен), был установлен без SameSiteатрибута. В будущем выпуске Chrome файлы cookie будут отправляться только с межсайтовыми запросами, если они установлены с помощью SameSite=Noneи Secure. Вы можете просмотреть файлы cookie в инструментах разработчика в разделе «Приложение»> «Хранилище»> «Файлы cookie» и ознакомиться с более подробной информацией по адресу https://www.chromestatus.com/feature/5088147346030592 и https://www.chromestatus.com/feature/5633521622188032 .

Я пытался создать печенье, как это, но это не помогло.

setcookie($cookie_name,$cookie_value, time() + 3600*24, "/;samesite=None ","mydomain.com", 1);

Следуя инструкциям из этого вопроса.

Данило Иванович
источник
Это также говорит «Безопасный», что означает https, я думаю.
wOxxOm
Вы можете следовать этому примеру, чтобы решить эту проблему: stackoverflow.com/a/58723552/6215447
Code
Вы можете использовать стороннюю библиотеку для управления файлами cookie в PHP 5.4+, предоставляя setcookieзамену, которая требует дополнительного аргумента $sameSite. Аргумент может быть None, Laxили Strict. Интерфейс ООП также доступен.
каркать

Ответы:

24

Я тоже в «методе проб и ошибок», но этот ответ от Github из Google Chrome Labs мне немного помог. Я определил его в свой основной файл, и он работал - хорошо, только для одного стороннего домена. Все еще делаю тесты, но я хочу обновить этот ответ с лучшим решением :)

Если у вас PHP до 7.2, как мой сервер:

header('Set-Cookie: cross-site-cookie=name; SameSite=None; Secure');

Или, если ваш хост уже обновлен до 7.3, вы можете использовать:

setcookie('cross-site-cookie', 'name', ['samesite' => 'None', 'secure' => true]);

Еще одна вещь, которую вы можете попробовать проверить куки, это включить флаг ниже, который, по их собственным словам, «добавит предупреждающие сообщения консоли для каждого куки, потенциально затронутого этим изменением»:

chrome://flags/#cookie-deprecation-messages

Смотрите весь код по адресу: https://github.com/GoogleChromeLabs/samesite-examples/blob/master/php.md , у них same-site-cookiesтоже есть код .

Димас Панте
источник
Я использую PHP 7.3 и использую оба (header и setcookie), но я все равно получаю предупреждение SameSite при загрузке страницы с помощью скрипта PayPal ... Хотя я все еще на локальном хосте, имеет ли это какое-то значение?
Lubre
@LuBre Хм может быть. Я еще не тестировал, но имеет смысл. Кроме того, ваш локальный хост имеет SSL?
Димас Панте
1
К сожалению, int не проблема localhost, я также получаю это предупреждение в Интернете. Я бы сказал, что это что-то на стороне Paypal ...
LuBre
Хм, хорошо ... Я думаю, @vir наш комментарий ниже подходит к вашей проблеме, возможно, PayPal еще не очень обеспокоен этим: P
Димас Панте
1
спасибо за предоставленный новый синтаксис php 7.3 - это
решило
24

По мере появления новой функции SameSite=Noneкуки-файлы также должны быть помечены как Secureили они будут отклонены.

Вы можете найти больше информации об изменениях в обновлениях хрома и в этом блоге

Примечание : не совсем связано непосредственно с вопросом, но может быть полезно для других, кто попал сюда, так как это было моей заботой вначале при разработке моего сайта:

если вы видите предупреждение из вопроса, в котором перечислены некоторые сторонние сайты (в моем случае это был google.com, да) - это означает, что им нужно это исправить, и это не имеет никакого отношения к вашему сайту. Конечно, если в предупреждении не упоминается ваш сайт, в этом случае добавление Secureдолжно исправить это.

вирус
источник
6
>= PHP 7.3

setcookie('key', 'value', ['samesite' => 'None', 'secure' => true]);

< PHP 7.3

exploit the path
setcookie('key', 'value', time()+(7*24*3600), "/; SameSite=None; Secure");

Emitting javascript

echo "<script>document.cookie('key=value; SameSite=None; Secure');</script>";
Роберт Грин
источник
1
Добавьте часть описания информации о вашем ответе
Lizesh Shakya
Хорошо, это единственный ответ на этой странице, который действительно работает и работает в производстве: D
Роберт Грин
1
Из документа ключи массива должны быть в нижнем регистре: ссылка
наихудшее
1
Это работало для меня в php 5 и Joomla и Chrome!
Хайден Тринг
1

В итоге я исправил установку Ubuntu 18.04 / Apache 2.4.29 / PHP 7.2 для Chrome 80, установив mod_headers:

a2enmod headers

Добавление следующей директивы в наши конфигурации Apache VirtualHost:

Header edit Set-Cookie ^(.*)$ "$1; Secure; SameSite=None"

И перезапуск Apache:

service apache2 restart

Просматривая документы ( http://www.balkangreenfoundation.org/manual/en/mod/mod_headers.html ), я заметил, что условие «всегда» имеет определенные ситуации, когда оно не работает из одного и того же пула заголовков ответов. Таким образом, не использовать «всегда» - это то, что у меня работало с PHP, но документы предполагают, что если вы хотите охватить все свои базы, вы можете добавить директиву как с «всегда», так и без него. Я не проверял это.

Этан Бернсайд
источник