सफारी 13+ आईफ्रेम ब्लॉक कॉर्स कुकीज़


10

सफारी फ़्लैट आउट आपको डोमेन के iframes में कुकीज़ को मूल डोमेन से अलग सेट करने की अनुमति नहीं देता, सर्वर-साइड CORS हेडर को धिक्कार है।

स्पष्ट करने के लिए: user domainA.com पर है। DomainB.com के लिए एक iframe खुला है, और iframe के अंदर domainB.com पर उपयोगकर्ता को प्रमाणित करने का प्रयास करता है। सेट-कुकी हेडर को सभी आवश्यक हेडर के साथ domainB.com iframe के अंदर सर्वर से लौटाया जाता है, लेकिन सफारी इसे बाद की कॉल में वापस नहीं भेज रहा है।

एक पुराना वर्कअराउंड iframe से एक फॉर्म सबमिट कर रहा था, और प्रतिक्रिया में कुकी सेट करें। मुझे लगता है कि वे इस तथ्य को पसंद करते थे कि उपयोगकर्ता फॉर्म जमा करने के लिए कुछ क्लिक कर रहा था। जब आप वापस आए तो कुकी को देखने के लिए आपको मतदान करना होगा, क्योंकि फॉर्म सबमिट में कोई कॉलबैक नहीं है, और HttpOnly कुकीज़ के मामले में आप नहीं कर सकते, लेकिन हे, यह काम किया! जब तक यह नहीं किया।

फिर, हाल ही में एक और वर्कअराउंड उपयोगकर्ता को एक नई विंडो / टैब में iframe डोमेन के लिए पुनर्निर्देशित कर रहा था, वहां एक यादृच्छिक कुकी सेट कर रहा था, और उस पल से, उस उपडोमेन iframe के अंदर "विश्वसनीय" था। फिर से, नई विंडो / टैब खोलने के लिए एक क्लिक की आवश्यकता थी, और नए टैब के खुलने का एक दृश्य संकेत भी था। ज्यादा सुरक्षा, ऐसे मानक।

और अब, सफारी 13 के रूप में - कोई और अधिक समाधान नहीं। कोई और अधिक सुरक्षित iframe कुकी सेटिंग ame नहीं

कोई भी अन्य प्रमाणीकरण योजना हमारे लिए अच्छी नहीं है (उदाहरण के लिए प्रामाणिक- X हेडर)। हमें एक HttpOnly सुरक्षित कुकी का उपयोग करने की आवश्यकता है, क्योंकि हम नहीं चाहते कि किसी भी तरह से जावास्क्रिप्ट क्लाइंट-साइड द्वारा सुलभ हो।

स्पष्ट होने के लिए, सब कुछ किसी भी अन्य ब्राउज़र पर बहुत अच्छा काम करता है।

प्रासंगिक वेबिट बुगज़िला

क्या किसी के पास कोई सुझाव है?

संपादित करें:

लिंक @tomschmidt के लिए धन्यवाद, यह सही दिशा की तरह लगता है। मैंने Apple के स्टोरेज एक्सेस एपीआई का उपयोग करने की कोशिश की, लेकिन दुर्भाग्य से, हालांकि मैं एपीआई के साथ अपने लॉगिन लॉजिक को शुरू करने से पहले एक्सेस का अनुरोध करना सुनिश्चित कर रहा हूं:

requestStorageAccess = async() => {
    return new Promise(resolve => {
      //@ts-ignore
      document.requestStorageAccess().then(
        function () {
          console.log('Storage access was granted');
          resolve(true);
        },
        function () {
          console.log('Storage access was denied');
          resolve(false);
        }
      );    
    });
  }


const storageAccessGranted = await requestStorageAccess();
console.log(storageAccessGranted) // prints 'true'
await login();

फिर भी, / लॉगिन एपीआई प्रतिक्रिया पर प्राप्त कुकीज़ एपीआई के बाद कॉल में नहीं भेजा जा रहा है :(


सुनिश्चित करें कि यह केवल ifrick की तरह iframe के साथ स्पष्ट इंटरैक्शन पर ट्रिगर होता है।
tomschmidt

1
हाँ, मैंने ऐसा किया है। वेबकिट बुगज़िला मुद्दे की जाँच करें जिससे मैं जुड़ा हुआ हूं, मुझे लगता है कि यह सफारी के अंत में एक वास्तविक बग है: /
टॉम टेमन

समस्या यह नहीं है कि कुकीज़ नहीं भेजी जाती हैं। यदि आप भंडारण पहुंच का अनुरोध करते हैं, तो मौजूदा कुकीज़ को सर्वर पर भेजा जाता है। समस्या यह है कि किसी भी नए कुकीज़ को संग्रहीत नहीं किया जाता है, इसलिए वे वहां भेजे जाने के लिए नहीं हैं।
मैट कॉसेंटिनो

@MattCosentino हाँ, मेरा यही मतलब है - "कुकीज़ / लॉगिन एपीआई प्रतिक्रिया पर प्राप्त" नए कुकीज़ हैं जो सेट-कुकी हेडर प्रतिक्रिया में वापस iframe डोमेन पर भेजे जाते हैं, लेकिन iframe डोमेन से अगला कॉल शामिल नहीं है अनुरोध में कुकीज़। तो हां, यह कहना अधिक सही है कि समस्या की जड़ यह है कि इस परिदृश्य में ब्राउज़र में कोई नई कुकीज़ संग्रहीत नहीं की जा रही हैं।
टॉम टेमन

जवाबों:


1

मुझे लगता है कि मुझे इसका समाधान मिल गया होगा: Apple का स्टोरेज एक्सेस एपीआई: https://webkit.org/blog/8124/introducing-storage-access-api/


हे, इस विचार के लिए धन्यवाद, लेकिन मुझे डर है कि यह चाल नहीं चली (मेरे उत्तर को संपादित करें)
टॉम टेमन

1
मैं भी सफारी के साथ एक ही मुद्दा रहा हूँ 13. किसी भी वैकल्पिक हल?
निरोशन

0

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


मैट, मैंने पॉप अप के साथ एक समान समाधान का उपयोग किया है, जो डेस्कटॉप सफारी 13.1 पर काम करता है, लेकिन iPad सफारी 13.4 पर परीक्षण करना काम नहीं कर रहा है। क्या आप इसे iPad पर काम कर पाने में सक्षम थे? Thnx
टीमडेन

HI मैट, जहाँ आप iframe कोड या मुख्य पृष्ठ में पॉपअप खोलते हैं। इसके कुछ नमूने कोड मेरे पास भी हो सकते हैं,
ज्ञान मार्ग
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.