चेतावनी के लिए "सेमसाइट कुकी को किसी से सेट कैसे करें" को ठीक करें? क्रोम एक्सटेंशन


41

मैंने क्रोम एक्सटेंशन बनाया और popup.js से मैंने PHP स्क्रिप्ट (Xhttprequest का उपयोग करके) को बुलाया, जो कुकी को पढ़ती है। ऐशे ही:

$cookie_name = "mycookie";

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

लेकिन मुझे एक्सटेंशन में त्रुटियों पर यह चेतावनी मिल रही है।

एक क्रॉस-साइट संसाधन (यहां मेरा डोमेन है) से जुड़ा एक कुकी SameSiteविशेषता के बिना सेट किया गया था । Chrome की भावी रिलीज़ केवल कुकीज़ को क्रॉस-साइट अनुरोधों के साथ वितरित करेगी यदि वे साथ सेट हैं SameSite=Noneऔर Secure। आप एप्लिकेशन> स्टोरेज> कुकीज़ के तहत डेवलपर टूल में कुकीज़ की समीक्षा कर सकते हैं और https://www.chromestatus.com/feature/5088147346030592 और https://www.chromestatus.com/feature/563352168188032 पर अधिक विवरण देख सकते हैं ।

मैंने इस तरह एक कुकी बनाने की कोशिश की, लेकिन इससे कोई फायदा नहीं हुआ।

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

इस सवाल से निर्देशों का पालन ।


यह "सिक्योर" भी कहता है जिसका अर्थ है https, मुझे लगता है।
wOxxOm

इस समस्या को हल करने के लिए आप इस उदाहरण का अनुसरण कर सकते हैं: stackoverflow.com/a/58723552/6215447
कोड कुकर

आप PHP 5.4+ पर कुकीज़ का प्रबंधन करने के लिए एक तीसरे पक्ष के पुस्तकालय का उपयोग कर सकते हैं , एक setcookieप्रतिस्थापन प्रदान करता है जो एक अतिरिक्त तर्क लेता है $sameSite। तर्क हो सकता है None, Laxया Strict। एक OOP इंटरफ़ेस भी उपलब्ध है।
कांव-कांव

जवाबों:


24

मैं उसके लिए एक "परीक्षण और त्रुटि" में भी हूं, लेकिन Google क्रोम लैब्स के गितुब के इस जवाब ने मेरी थोड़ी मदद की। मैंने इसे अपनी मुख्य फ़ाइल में परिभाषित किया और यह काम किया - ठीक है, केवल एक तृतीय-पक्ष डोमेन के लिए। अभी भी परीक्षण कर रहे हैं, लेकिन मैं बेहतर समाधान के साथ इस उत्तर को अद्यतन करने के लिए उत्सुक हूं :)

अगर आपके पास 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 का उपयोग कर रहा हूं और दोनों (हेडर और सेटकुकी) का उपयोग कर रहा हूं, लेकिन मुझे अभी भी एक ही चेतावनी मिलती है जब मैं एक पेज को एक पेपल स्क्रिप्ट के साथ लोड करता हूं ... मैं अभी भी लोकलहोस्ट पर हूं, हालांकि क्या इससे कोई फर्क पड़ता है?
लुबरे

@LuBre हम्म हो सकता है। मैंने अभी तक इस तरह का परीक्षण नहीं किया, लेकिन समझ में आता है। इसके अलावा, क्या आपकी लोकलहोस्ट के पास एसएसएल है?
डिमा पैंटी

1
दुख की बात है कि एक स्थानीयहोस्ट नहीं है, मैं इस चेतावनी को ऑनलाइन भी अनुभव करता हूं। मैं कहूंगा कि यह
पेपल

हम्म अच्छी तरह से ... मुझे लगता है कि @ हमें नीचे टिप्पणी आपकी समस्या फिट बैठती है, शायद पेपल इसके बारे में बहुत चिंतित नहीं है: पी
डिमास पैंते

1
नया php 7.3 सिंटैक्स प्रदान करने के लिए धन्यवाद - जिसने मेरी समस्या को ठीक कर दिया
बिलीनोआह

24

जैसे ही नई सुविधा आती है, SameSite=Noneकुकीज़ को भी चिह्नित किया जाना चाहिए Secureया उन्हें अस्वीकार कर दिया जाएगा।

क्रोमियम अपडेट और इस ब्लॉग पोस्ट पर बदलाव के बारे में अधिक जानकारी पा सकते हैं

नोट : प्रश्न से सीधे संबंधित नहीं है, लेकिन दूसरों के लिए उपयोगी हो सकता है, जो यहां उतरा है क्योंकि यह मेरी वेबसाइट के विकास के दौरान पहली बार मेरी चिंता थी:

यदि आप उस प्रश्न से चेतावनी देख रहे हैं जो कुछ 3 पार्टी साइटों को सूचीबद्ध करता है (मेरे मामले में यह 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
अपने उत्तर के बारे में विवरण की जानकारी का एक टुकड़ा जोड़ें
लिजेश शाक्य

ठीक है कि इस पृष्ठ पर इसका एकमात्र उत्तर है जो वास्तव में काम करता है और उत्पादन में काम कर रहा है: डी
रॉबर्ट ग्रीन

1
डॉक्टर से, सरणी कुंजी लोअरकेस में होनी चाहिए: लिंक
सबसे खराब

1
यह मेरे लिए php 5 और जूमला और क्रोम में काम करता है!
हेडन थ्रिंग

1

मैंने अपना Ubuntu 18.04 / Apache 2.4.29 / PHP 7.2 फिक्स करके Chrome 80 के लिए mod_headers स्थापित करके समाप्त किया:

a2enmod headers

हमारे अपाचे VirtualHost विन्यास के लिए निम्नलिखित निर्देश जोड़ना:

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

और अपाचे को फिर से शुरू करना:

service apache2 restart

डॉक्स की समीक्षा करने में ( http://www.balkangreenfoundation.org/manual/en/mod/mod_headers.html ) की मैंने देखा कि "हमेशा" स्थिति में कुछ ऐसी स्थितियाँ होती हैं, जहाँ यह प्रतिक्रिया शीर्षकों के एक ही पूल से काम नहीं करती है। इस प्रकार "हमेशा" का उपयोग करना मेरे लिए PHP के साथ काम नहीं करता है, लेकिन डॉक्स सुझाव देते हैं कि यदि आप अपने सभी ठिकानों को कवर करना चाहते हैं तो आप "हमेशा" के साथ और बिना दोनों के निर्देश को जोड़ सकते हैं। मैंने उसका परीक्षण नहीं किया है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.