Bagaimana cara memperbaiki peringatan "set cookie SameSite ke none"? Ekstensi Chrome


41

Saya membuat ekstensi chrome dan dari popup.js saya memanggil skrip PHP (Menggunakan Xhttprequest) yang membaca cookie. Seperti ini:

$cookie_name = "mycookie";

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

Tapi saya mendapatkan peringatan ini karena kesalahan dalam ekstensi.

Cookie yang terkait dengan sumber daya lintas-situs di (Inilah domain saya) disetel tanpa SameSiteatribut. Rilis Chrome di masa mendatang hanya akan mengirimkan cookie dengan permintaan lintas situs jika diatur dengan SameSite=Nonedan Secure. Anda dapat meninjau cookie dalam alat pengembang di bawah Aplikasi> Penyimpanan> Cookie dan melihat rincian lebih lanjut di https://www.chromestatus.com/feature/5088147346030592 dan https://www.chromestatus.com/feature/563352162218808032 .

Saya mencoba membuat cookie seperti ini tetapi tidak membantu.

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

Ikuti instruksi dari pertanyaan ini .


Ia juga mengatakan "Aman" yang berarti https, saya kira.
wOxxOm

Anda dapat mengikuti contoh ini untuk menyelesaikan masalah ini: stackoverflow.com/a/58723552/6215447
Code Cooker

Anda dapat menggunakan perpustakaan pihak ketiga untuk mengelola cookie di PHP 5.4+, memberikan setcookiepengganti yang membutuhkan argumen tambahan $sameSite. Argumennya bisa None, Laxatau Strict. Antarmuka OOP juga tersedia.
gak

Jawaban:


24

Saya juga dalam "coba-coba" untuk itu, tetapi jawaban dari Google Chrome Labs 'Github ini sedikit membantu saya. Saya mendefinisikannya ke dalam file utama saya dan berfungsi - yah, hanya untuk satu domain pihak ketiga. Masih membuat tes, tapi saya ingin memperbarui jawaban ini dengan solusi yang lebih baik :)

Jika Anda memiliki PHP hingga 7.2, seperti server saya:

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

Atau jika host Anda sudah diperbarui ke 7.3, Anda dapat menggunakan:

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

Hal lain yang dapat Anda coba untuk memeriksa cookie, adalah mengaktifkan bendera di bawah ini, yang - dengan kata-kata mereka sendiri - "akan menambahkan pesan peringatan konsol untuk setiap cookie yang berpotensi dipengaruhi oleh perubahan ini":

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

Lihat seluruh kode di: https://github.com/GoogleChromeLabs/samesite-examples/blob/master/php.md , mereka juga memiliki kode tersebut same-site-cookies.


Saya menggunakan PHP 7.3 dan menolak keduanya (header dan setcookie) tapi saya masih mendapatkan peringatan SameSite ketika saya memuat halaman dengan skrip PayPal ... Namun saya masih menggunakan localhost, apakah ada bedanya?
LuBre

@LuBre Hmm bisa jadi. Saya belum menguji seperti ini, tetapi masuk akal. Juga, apakah localhost Anda memiliki SSL?
Dimas Pante

1
Sayangnya int bukan masalah localhost, saya mengalami peringatan ini secara online juga. Saya akan mengatakan itu sesuatu di pihak Paypal ...
LuBre

Hmm yah ... Saya pikir @vir kami komentar di bawah ini sesuai dengan masalah Anda, mungkin PayPal belum terlalu khawatir tentang hal itu: P
Dimas Pante

1
terima kasih telah menyediakan sintaks php 7.3 baru - yang memperbaiki masalah saya
billynoah

24

Ketika fitur baru datang, SameSite=Nonecookie juga harus ditandai sebagai Secureatau mereka akan ditolak.

Orang dapat menemukan informasi lebih lanjut tentang perubahan pada pembaruan kromium dan pada posting blog ini

Catatan : tidak cukup terkait langsung dengan pertanyaan, tetapi mungkin bermanfaat bagi orang lain yang mendarat di sini karena ini merupakan keprihatinan saya pertama kali selama pengembangan situs web saya:

jika Anda melihat peringatan dari pertanyaan yang mencantumkan beberapa situs pihak ke-3 (dalam kasus saya ini adalah google.com, ya) - itu berarti mereka perlu memperbaikinya dan itu tidak ada hubungannya dengan situs Anda. Tentu saja kecuali peringatan itu menyebutkan situs Anda, dalam hal ini penambahan Secureharus memperbaikinya.


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
Tambahkan sepotong informasi deskripsi tentang jawaban Anda
Lizesh Shakya

ok itu satu-satunya jawaban pada halaman ini yang benar-benar berfungsi dan berfungsi dalam produksi: D
Robert Greene

1
Dari dokumen, kunci array harus dalam huruf kecil: tautan
Terburuk

1
Ini bekerja untuk saya di php 5 dan joomla dan chrome!
Hayden Thring

1

Saya akhirnya memperbaiki instalasi Ubuntu 18.04 / Apache 2.4.29 / PHP 7.2 kami untuk Chrome 80 dengan menginstal mod_headers:

a2enmod headers

Menambahkan arahan berikut ke konfigurasi Apache VirtualHost kami:

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

Dan me-restart Apache:

service apache2 restart

Dalam meninjau dokumen ( http://www.balkangreenfoundation.org/manual/en/mod/mod_headers.html ) saya perhatikan bahwa kondisi "selalu" memiliki situasi tertentu di mana ia tidak bekerja dari kumpulan header tanggapan yang sama. Jadi tidak menggunakan "selalu" adalah apa yang bekerja untuk saya dengan PHP tetapi dokumen menyarankan bahwa jika Anda ingin menutupi semua pangkalan Anda, Anda bisa menambahkan arahan baik dengan dan tanpa "selalu". Saya belum mengujinya.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.