“SameSite çerezini yok olarak ayarla” uyarısı nasıl düzeltilir? Chrome Uzantısı


41

Bir krom uzantısı oluşturdum ve çerez okudum PHP komut dosyası (Xhttprequest Kullanarak) denir. Bunun gibi:

$cookie_name = "mycookie";

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

Ancak bu uyarıyı uzantılardaki hatalarda alıyorum.

Adresindeki siteler arası bir kaynakla ilişkilendirilmiş bir çerez (İşte benim alan adım) SameSiteözellik olmadan ayarlandı . Chrome'un gelecekteki bir sürümü, yalnızca SameSite=Noneve ile ayarlanırsa siteler arası istekleri olan çerezleri gönderecektir Secure. Uygulama> Depolama> Çerezler altındaki geliştirici araçlarında çerezleri inceleyebilir ve daha fazla ayrıntıyı https://www.chromestatus.com/feature/5088147346030592 ve https://www.chromestatus.com/feature/5633521622188032 adresinde bulabilirsiniz .

Böyle bir çerez oluşturmaya çalıştım ama yardımcı olmadı.

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

Bu sorudaki talimatları takip edin .


Ayrıca https anlamına gelen "Güvenli" diyor sanırım.
wOxxOm

bu sorunu çözmek için bu örneği takip edebilirsiniz: stackoverflow.com/a/58723552/6215447
Code Cooker

Sen kullanabilirsiniz bir üçüncü taraf kitaplığı bir sağlayarak, PHP 5.4+ çerezleri yönetmek için setcookieek bir argüman alır değiştirme $sameSite. Argüman olabilir None, Laxya da Strict. Bir OOP arayüzü de mevcuttur.
caw

Yanıtlar:


24

Ben de bunun için bir "deneme yanılma" içindeyim, ancak Google Chrome Labs 'Github'ın bu yanıtı bana biraz yardımcı oldu. Ana dosyama tanımladım ve işe yaradı - sadece bir üçüncü taraf etki alanı için. Hala testler yapıyorum, ancak bu cevabı daha iyi bir çözümle güncellemeye hevesliyim :)

Sunucumun yaptığı gibi 7,2'ye kadar PHP'niz varsa:

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

Veya barındırıcınız zaten 7.3 olarak güncellendiğinde şunları kullanabilirsiniz:

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

Çerezleri kontrol etmeyi deneyebileceğiniz başka bir şey, aşağıdaki bayrağı etkinleştirmektir; bu, kendi ifadeleriyle "bu değişiklikten potansiyel olarak etkilenen her bir çerez için konsol uyarı mesajları ekleyecektir":

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

Kodun tamamını görmek için: https://github.com/GoogleChromeLabs/samesite-examples/blob/master/php.md , onlar da kodu var same-site-cookies.


PHP 7.3 kullanıyorum ve her ikisi de (başlık ve setcookie) ried ama ben bir PayPal komut dosyası ile bir sayfa yüklediğinizde hala SameSite uyarı olsun ... Yine de localhost üzerinde değilim, herhangi bir fark yaratıyor mu?
LuBre

@ LuBre Hmm olabilir. Henüz böyle test etmedim, ama mantıklı. Ayrıca, yerel ana makinenizin SSL'si var mı?
Dimas Pante

1
Ne yazık ki int bir localhost sorunu değil, bu uyarıyı çevrimiçi olarak da deneyimliyorum. Bunun Paypal tarafında bir şey olduğunu söyleyebilirim ...
LuBre

Hmm iyi ... Bence @vir bize aşağıdaki yorum sorununuzu uyuyor, muhtemelen PayPal henüz bu konuda çok endişeli değil: P
Dimas Pante

1
yeni php 7.3 sözdizimini sağladığınız için teşekkürler - bu sorunumu çözdü
billynoah

24

Yeni özellik geldiğinde, SameSite=Noneçerezler de olarak işaretlenmelidir, Secureaksi takdirde reddedilirler.

Krom güncellemelerindeki ve bu blog yayınındaki değişiklik hakkında daha fazla bilgi bulabilirsiniz.

Not : doğrudan soru ile ilgili değildir, ancak web sitemin geliştirilmesi sırasında ilk başta benim endişem olduğu için buraya gelen diğerleri için yararlı olabilir:

Söz gelen uyarı görüyorsanız listeleri bazı 3. parti siteleri (benim durumumda o google.com, ha oldu) o - araçlarının onlar bunu düzeltmek gerekir ve sitenize ilgisi 's şey. Tabii ki uyarı sitenizden bahsetmedikçe, bu durumda ekleme Securesorunu düzeltmelidir.


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
Cevabınız hakkında bir açıklama bilgisi ekleyin
Lizesh Shakya

tamam, bu sayfadaki aslında çalışan ve üretimde çalışan tek cevap: D
Robert Greene

1
Dokümandan, dizi anahtarları küçük harfle yazılmalıdır: link
En kötü

1
Bu benim için php 5 ve joomla ve krom çalıştı!
Hayden Thring

1

Mod_headers yükleyerek Chrome 80 için Ubuntu 18.04 / Apache 2.4.29 / PHP 7.2 yüklememizi düzelttik:

a2enmod headers

Apache VirtualHost konfigürasyonlarımıza aşağıdaki yönergeleri eklemek:

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

Ve Apache yeniden başlatılıyor:

service apache2 restart

Dokümanları incelerken ( http://www.balkangreenfoundation.org/manual/en/mod/mod_headers.html ) "always" koşulunun, aynı yanıt üstbilgileri havuzundan çalışmadığı belirli durumlar olduğunu fark ettim. Böylece "her zaman" kullanmamak PHP ile benim için çalıştı ama dokümanlar tüm üsleri kapsamak istiyorsanız hem "her zaman" ile ve olmadan yönerge ekleyebilirsiniz öneririz. Bunu test etmedim.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.