Як виправити попередження "встановити cookie SameSite на жодне"? Розширення Chrome


41

Я створив хромоване розширення і з 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 .

Я спробував створити такий файл cookie, але це не допомогло.

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

Виконуючи вказівки з цього питання.


Він також говорить "Безпечний", що означає https, я думаю.
wOxxOm

Ви можете наслідувати цей приклад , щоб вирішити цю проблему: stackoverflow.com/a/58723552/6215447
код Плита

Ви можете використовувати сторонні бібліотеки для управління файлами cookie на PHP 5.4+, надаючи setcookieзаміну, яка потребує додаткового аргументу $sameSite. Аргументом може бути None, Laxабо Strict. Також доступний інтерфейс OOP.
каре

Відповіді:


24

Я також переживаю "пробну помилку", але ця відповідь від Github Labs 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]);

Ще одна річ, яку ви можете спробувати перевірити файли cookie, це включити прапор нижче, який - власними словами - "додасть консольні попереджувальні повідомлення для кожного печива, який потенційно може вплинути на цю зміну":

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

Дивіться весь код на веб-сторінці : https://github.com/GoogleChromeLabs/samesite-examples/blob/master/php.md , і вони також мають код same-site-cookies.


Я використовую PHP 7.3 і ried обидва (заголовок і setcookie), але я все одно отримую попередження SameSite, коли завантажую сторінку із сценарієм PayPal ... Я все ще на localhost, хоча це має значення?
LuBre

@LuBre Хм могло бути. Я ще не тестував подібного, але має сенс. Також у вашого localhost є SSL?
Дімас Панте

1
На жаль, int не є проблемою для локальних хостів, і я переживаю це попередження в Інтернеті. Я б сказав, що це щось із боку Paypal ...
LuBre

Хм добре ... Я думаю, що @vir нам коментар нижче відповідає вашій проблемі, ймовірно, PayPal ще не дуже хвилює це: P
Dimas Pante

1
дякую за надання нового синтаксису php 7.3 - що
вирішило

24

По мірі появи нової функції SameSite=Noneфайли cookie також повинні бути позначені як 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
Додайте опис інформації про свою відповідь
Лізеш Шакя

ОК, єдина відповідь на цій сторінці, яка насправді працює і працює у виробництві: D
Роберт Грін,

1
Клавіші масиву від doc повинні знаходитись з малих літер: посилання
Найгірше,

1
Це працювало для мене в php 5 та joomla та chrome!
Hayden Thring

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, але документи пропонують, що якщо ви хочете охопити всі ваші бази, ви можете додати директиву як з "так і без" завжди. Я цього не перевіряв.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.