दूसरे डोमेन के लिए कुकी कैसे सेट करें


166

मान लें कि मेरे पास एक वेबसाइट है a.com, और जब इस साइट का एक विशिष्ट पृष्ठ लोड होता है, तो पेज लिंक कहें, मुझे एक अन्य साइट के लिए कुकी सेट करना पसंद है b.com, फिर उपयोगकर्ता को रीडायरेक्ट करें b.com

मेरा मतलब है, के लोड पर a.com/linkमैं b.comउपयोगकर्ता के लिए एक कुकी सेट करना चाहता हूं और पुनर्निर्देशित करना चाहता हूं b.com

मैंने इसका परीक्षण किया, और ब्राउज़र को वास्तव में कुकी प्राप्त हुई a.com/link, लेकिन उसने उस कुकी को पुनर्निर्देशन अनुरोध पर नहीं भेजा b.com। क्या यह सामान्य है?

क्या हम अन्य डोमेन के लिए कुकीज़ सेट कर सकते हैं?


ज्ञात रहे कि यदि आप b.com पर कुकीज़ सेट करने के लिए URL पैरामीटर का उपयोग करते हैं, तो कोई भी किसी भी वेबसाइट से b.com पर किसी कुकी मूल्य को बाध्य कर सकता है।
जुलिएन

जवाबों:


129

आप किसी अन्य डोमेन के लिए कुकीज़ सेट नहीं कर सकते। इसकी अनुमति देने से सुरक्षा में भारी खामी आएगी।

कुकी सेट करने के लिए आपको b.com प्राप्त करना होगा। अगर a.com उपयोगकर्ता को रीडायरेक्ट करता हैb.com/setcookie.php?c=value

सेटकुकी स्क्रिप्ट में कुकी सेट करने के लिए निम्नलिखित हो सकते हैं और b.com पर सही पृष्ठ पर पुनर्निर्देशित कर सकते हैं

<?php
    setcookie('a', $_GET['c']);
    header("Location: b.com/landingpage.php");
?>

फिर भी a.com एक ही डेटा को हेडर के रूप में सम्मिलित कर सकता है जब b.com पर रीडायरेक्ट किया जाता है, तो क्या यह नहीं हो सकता है? यह सुरक्षा दोष क्यों नहीं पेश करता है?
कोडर

3
@ कोडर, सेटकुकी फ्यूजन b.com से ब्राउज़र को भेजे जाने वाले कुकी हेडर के परिणामस्वरूप होगा। a.com b.com से कुकी हेडर भेजने में सक्षम नहीं है।
qbert220

हाँ यह बहुत असुरक्षित है, लेकिन यह काम करता है। यदि ओपी के पास एक.कॉम और बी.कॉम है और कुकी बहुत तुच्छ है, तो शायद यह ठीक है।
रॉकेट्सफास्ट

1
यह जवाब में बेहतर सूचना है कि यह असुरक्षित है हालांकि यह काम करता है।
रॉय लिंग

2
हालांकि आप यह कैसे कह सकते हैं कि youtube पर अपना खाता दिखाने के लिए gmail द्वारा बनाई गई कुकीज़ पढ़ रहे हैं?
ताहा सुलेमान तेमुरी

55

शीर्ष उत्तर के समान है, लेकिन पृष्ठ पर पुनः निर्देशित करने और फिर से वापस करने के लिए जो उपयोगकर्ता के खराब अनुभव का कारण बनेगा, आप ए पर छवि सेट कर सकते हैं।

<img src="http://www.example.com/cookie.php?val=123" style="display:none;">

और फिर कुकीज में example.com पर डोमेन बी। आपके पास निम्नलिखित कोड होंगे:

<?php
    setcookie('a', $_GET['val']);
?>

Hattip को Subin


1
अच्छा हैक ... :)
sotn

16
खबरदार कि शायद एक बहुत बुरा विचार है। आप बहुत जानबूझकर कुकी सुरक्षा को दरकिनार कर रहे हैं, जो मूल रूप से किसी को भी इस तरह से उस कुकी को सेट करने के लिए एक तैयार किया गया GET अनुरोध भेजने की अनुमति देता है। मुझे नहीं पता कि आप उस कुकी के साथ क्या करते हैं, लेकिन मुझे उम्मीद है कि इसमें बैंक बैलेंस शामिल नहीं होगा।
स्कॉट स्टैफ़ोर्ड

मैं आपको आश्वस्त कर सकता हूं कि इसमें बैंक बैलेंस शामिल नहीं था। लेकिन अच्छी बात :)
जोनाथन

2
अगर इस मामले में हर कोई अपने स्वयं के पैरामीटर के साथ इस डोमेन को कॉल कर सकता है, तो आप दूसरे पैरामीटर को जोड़कर सुरक्षा जोड़ सकते हैं। डेटा और एक अतिरिक्त नमक के साथ एक हैश बनाएं और इसे पैरामीटर के रूप में पास करें। अपने कुकी में। केवल टोकन और फिर से तुलना करके $ _GET ['वैल'] में डेटा को सत्यापित करें।
सेबा एम

यदि आप इस तरह से GET भेज रहे हैं, तो आप AJAX का उपयोग कर सकते हैं।
user10398534

18

इसके लिए आप इसका इस्तेमाल कर सकते हैं Iframe। फेसबुक शायद इस तकनीक का उपयोग करता है। आप यहाँ इस पर अधिक पढ़ सकते हैं । Stackoverflow समान तकनीक का उपयोग करता है, लेकिन HTML5 स्थानीय भंडारण के साथ, अपने ब्लॉग पर इस पर अधिक


1
iframe ने मेरे समाधान के लिए पूरी तरह से काम किया, बस url में मान शामिल करें जैसे कि सामान्य अनुरोध प्राप्त करें और कुकी मानों के साथ सर्वर से जवाब दें
जोएल डेविस

सलाह दी जाती है, आपके पास काम करने के लिए आपके एक्सेस-कंट्रोल-अनुमति-मूल को ठीक से कॉन्फ़िगर किया जाना चाहिए।
user10398534

6

दूसरे डोमेन के लिए कुकी सेट करना संभव नहीं है।

यदि आप किसी अन्य डोमेन को डेटा पास करना चाहते हैं, तो आप इसे url में एन्कोड कर सकते हैं।

a.com  ->  b.com/redirect?info=some+info (and set cookie) -> b.com/other+page

4
url से सेशन कुकी सेट करना एक सुरक्षा जोखिम है। यूआरएल आमतौर पर लॉग इन किया जाता है और एक हमलावर को एक उपयोगकर्ता सत्र चोरी करने की अनुमति देगा
डेन मैकॉले

6

आप कम से कम सीधे नहीं कर सकते। यह एक बुरा सुरक्षा जोखिम होगा।

जबकि आप एक निर्दिष्ट कर सकते हैं डोमेन विशेषता , तो विनिर्देश कहता है "उपयोगकर्ता एजेंट कुकीज़ को अस्वीकार कर देगा जब तक कि डोमेन विशेषता कुकी के लिए एक गुंजाइश निर्दिष्ट नहीं करती है जिसमें मूल सर्वर शामिल होगा।"

चूंकि मूल सर्वर है a.com और इसमें शामिल नहीं है b.com, इसलिए इसे सेट नहीं किया जा सकता है।

आपको b.comइसके बजाय कुकी सेट करने के लिए प्राप्त करने की आवश्यकता होगी । आप ऐसा कर सकते हैं (उदाहरण के लिए) HTTP रीडायरेक्ट करने के लिए b.comऔर वापस।


मुझे पता है कि यह एक पुरानी प्रतिक्रिया है, लेकिन यह सुरक्षा जोखिम क्यों होगा? आप अपने कंसोल में या एक्सटेंशन में कुकीज़ सेट कर सकते हैं? यदि आप एक अलग डोमेन के लिए कुकी सेट कर सकते हैं तो यह क्यों महत्वपूर्ण है?
टिम्बरमैन

@Timberman - प्रश्न जावास्क्रिप्ट एक वेबसाइट पर चलाने के बारे में है नहीं डेवलपर उपकरण में और नहीं एक स्पष्ट इंस्टॉल किए गए एक्सटेंशन में। यह एक सुरक्षा जोखिम होगा क्योंकि किसी का भी दौरा evil-hack.com उस के लिए एक कुकी सेट हो सकता है जो their-favourite-website.comउस वेबसाइट पर अपनी पसंद बदल देगा।
क्वेंटिन

मैं समझता हूं कि, लेकिन यह सुरक्षा जोखिम कैसे है? मुझे पूरा यकीन है कि इसके पास सुरक्षा वार करने के लिए कुछ भी नहीं है?
टिम्बरमैन

@ टिम्बरमैन - यदि आप एक हमलावर की साइट के साथ एक समस्या को पूरी तरह से अलग साइट के लिए अपनी प्राथमिकताएं बदलते हुए नहीं देख सकते हैं, तो मुझे नहीं पता कि इसे कैसे स्पष्ट रूप से समझाया जाए।
क्वेंटिन

मुझे समस्या दिखाई देती है, लेकिन मैं यह नहीं देखता कि यह सुरक्षा जोखिम कैसे है। मैं आपसे सहमत हूं कि जावास्क्रिप्ट को एक अलग डोमेन के लिए कुकी सेट करने में सक्षम नहीं होना चाहिए, लेकिन अगर यह सक्षम था तो यह सुरक्षा का मुद्दा कैसे है?
टिम्बरमैन

5

आपके पास a.my-company.comऔर b.my-company.comइसके बदले में a.comऔर b.comआप .my-company.comडोमेन के लिए एक कुकी जारी कर सकते हैं - यह स्वीकार किया जाएगा और दोनों डोमेन को भेजा जाएगा।


1
क्या b.my-company.com के लिए a.my-company.com में कुकी बनाना संभव है?
महेश काजले

1
जब तक my-company.com सार्वजनिक प्रत्यय ब्लैक-होल सूची में नहीं है, उस स्थिति में जब ब्राउज़र चुपचाप कुकी को सेट करने के सभी प्रयासों की अनदेखी करेगा! : '- (
माइकल

5

देखें RFC6265 :

उपयोगकर्ता एजेंट कुकीज़ को अस्वीकार कर देगा जब तक कि डोमेन विशेषता कुकी के लिए एक गुंजाइश निर्दिष्ट नहीं करती है जिसमें मूल सर्वर शामिल होगा। उदाहरण के लिए, उपयोगकर्ता एजेंट foo.example.com से "example.com" या "foo.example.com" के डोमेन विशेषता के साथ एक कुकी स्वीकार करेगा, लेकिन उपयोगकर्ता एजेंट डोमेन विशेषता वाले कुकी को स्वीकार नहीं करेगा "bar.example.com" या "baz.foo.example.com" का।

नोट: सुरक्षा कारणों से, कई उपयोगकर्ता एजेंट "सार्वजनिक प्रत्ययों" के अनुरूप डोमेन विशेषताओं को अस्वीकार करने के लिए कॉन्फ़िगर किए गए हैं। उदाहरण के लिए, कुछ उपयोगकर्ता एजेंट "कॉम" या "co.uk" के डोमेन विशेषताओं को अस्वीकार कर देंगे। (अधिक जानकारी के लिए खंड 5.3 देखें।)

लेकिन छवि / iframe कार्यों के साथ उपर्युक्त वर्कअराउंड, हालांकि इसकी असुरक्षा के कारण अनुशंसित नहीं है।


1

आप नहीं कर सकते, लेकिन ... यदि आप दोनों पृष्ठों के मालिक हैं तो ...

1) आप डेटा को क्वेरी params ( http://siteB.com/?key=value ) के माध्यम से भेज सकते हैं

2) आप साइट ए के अंदर साइट बी का एक आइफ्रेम बना सकते हैं और आप एक स्थान से दूसरे स्थान पर संदेश भेज सकते हैं। जैसा कि साइट बी साइट बी कुकीज़ का मालिक है यह सही पोस्ट संदेश को संसाधित करके आपको जो भी मूल्य निर्धारित करने में सक्षम होगा। (आप को संदेश भेजने के लिए आपको अन्य अवांछित प्रेषकों को रोकना चाहिए! यह आपके ऊपर है और तंत्र आपको इसे रोकने के लिए उपयोग करने का निर्णय लेता है)


0

इस लिंक में, हम समाधान लिंक पाएंगे ।

setcookie("TestCookie", "", time() - 3600, "/~rasmus/", "b.com", 1);

1
यह काम नहीं करेगा। विनिर्देश देखें : "उपयोगकर्ता एजेंट कुकीज़ को अस्वीकार कर देगा जब तक कि डोमेन विशेषता कुकी के लिए एक गुंजाइश निर्दिष्ट नहीं करती है जिसमें मूल सर्वर शामिल होगा।"
क्वेंटिन

0

ए। पोस्ट अनुरोधों को डाक से भेजें सर्वर पर केवल पोस्ट रिक्वेस्ट होती हैं और क्लाइंट द्वारा इन तक नहीं पहुंचा जा सकता है।

आप CURL (अनुशंसित, सर्वरसाइड) या छिपे हुए फॉर्म (क्लाइंटसाइड) का उपयोग a.comकरने से एक POST अनुरोध भेज सकते हैं । यदि आप बाद के लिए जाते हैं, तो आप अपने जावास्क्रिप्ट को बाधित करना चाह सकते हैं ताकि उपयोगकर्ता एल्गोरिथ्म को समझने और उसके साथ हस्तक्षेप करने में सक्षम न हो।b.commethod="POST"

b.comकुकीज़ सेट करने के लिए प्रवेश द्वार बनाएं :

<?php
    if (isset($_POST['data']) {
        setcookie('a', $_POST['data']);
        header("Location: b.com/landingpage");
    }
?>

यदि आप सुरक्षा एक कदम और आगे लाने के लिए चाहते हैं, (दोनों पक्षों पर एक समारोह को लागू a.comऔर b.com) एन्क्रिप्ट करने के लिए (पर a.com) और डिक्रिप्ट (पर b.comएक क्रिप्टोग्राफिक बीजलेख का प्रयोग करके) डेटा।

यदि आप ऐसा कुछ करने की कोशिश कर रहे हैं जो बिल्कुल सुरक्षित होना चाहिए (जैसे लॉगिन सत्र को स्थानांतरित करना) तो oAuth का प्रयास करें या https://api.cloudianos.com/docs#v2/auth से कुछ प्रेरणा लें

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