एचटीटीपी कैश मेमोरी को अपडेट करके, सुरक्षा और निजता को बेहतर बनाएं

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

Arthur Sonzogni
Arthur Sonzogni

डिफ़ॉल्ट रूप से, संसाधनों को हमेशा किसी भी तरह की कैश मेमोरी से कैश मेमोरी में सेव किया जा सकता है. Cache-Control हेडर का इस्तेमाल न करने या उसका गलत इस्तेमाल न करने से, आपकी वेबसाइट और उपयोगकर्ताओं की निजता पर बुरा असर पड़ सकता है.

अगर आपको अपने सवालों के जवाब निजी रखने हैं, तो हमारा सुझाव है कि इनमें से कोई एक काम करें:

  • मध्यस्थों को संसाधन को कैश मेमोरी में सेव करने से रोकें. Cache-Control: private सेट करें.
  • सही सेकंडरी कैश कुंजी सेट करें. अगर कुकी की वजह से रिस्पॉन्स अलग-अलग है, तो Vary: Cookie को सेट करें. ऐसा कुकी स्टोर करने के दौरान हो सकता है.

यह जानना क्यों ज़रूरी है, यह जानने के लिए आगे पढ़ें और पता लगाएं:

  1. सुरक्षा और निजता से जुड़ी ऐसी समस्याएं जिनके बारे में आपको जानकारी नहीं है
  2. अलग-अलग तरह की एचटीटीपी कैश मेमोरी और आम ग़लतफ़हमियां
  3. ज़्यादा अहम वेबसाइटों के लिए सुझाई गई कार्रवाइयां

Spectre की जोखिम की आशंकाओं के बारे में लीक होने वाले संसाधन

स्पेक्टर की जोखिम की आशंका, पेज को ओएस प्रोसेस की मेमोरी पढ़ने की अनुमति देती है. इसका मतलब है कि कोई हमलावर क्रॉस-ऑरिजिन डेटा बिना अनुमति के ऐक्सेस कर सकता है. इस वजह से, आधुनिक वेब ब्राउज़र ने क्रॉस-ऑरिजिन आइसोलेशन वाले पेजों पर, SharedArrayBuffer या हाई रिज़ॉल्यूशन टाइमर जैसी कुछ सुविधाओं का सीमित इस्तेमाल किया है.

आधुनिक वेब ब्राउज़र, क्रॉस-ऑरिजिन एम्बेडर नीति (सीओईपी) को लागू करते हैं. इससे पक्का होता है कि क्रॉस-ऑरिजिन संसाधन इनमें से कोई एक हैं:

  • सार्वजनिक संसाधन, बिना कुकी के अनुरोध किए जाते हैं
  • ऐसे रिसॉर्स जिन्हें सीओआरएस या CORP हेडर के ज़रिए, क्रॉस-ऑरिजिन से शेयर किए जाने की अनुमति दी गई है

COEP सेटअप, किसी हमलावर को Spectre का गलत इस्तेमाल करने से नहीं रोकता है. हालांकि, इससे यह पक्का किया जा सकता है कि क्रॉस-ऑरिजिन रिसॉर्स, हमलावर (जब ब्राउज़र पर सार्वजनिक रिसॉर्स के तौर पर लोड किए गए हों) के लिए अहम न हों या उन्हें हमलावर के साथ शेयर न किया जाए (जब उन्हें CORP: cross-origin के साथ शेयर किया जाए).

एचटीटीपी कैश मेमोरी, स्पेक्टर पर कैसे असर डालती है?

अगर Cache-Control हेडर सही तरीके से सेट नहीं किया गया है, तो कोई हमलावर हमला कर सकता है. उदाहरण के लिए:

  1. क्रेडेंशियल वाले संसाधन को कैश मेमोरी में सेव किया जाता है.
  2. हमलावर, क्रॉस-ऑरिजिन आइसोलेटेड पेज को लोड करता है.
  3. हमलावर फिर से संसाधन के लिए अनुरोध करता है.
  4. COEP:credentialless को ब्राउज़र सेट करता है, ताकि संसाधन को कुकी के बिना फ़ेच किया जा सके. हालांकि, कैश मेमोरी में सेव किया गया रिस्पॉन्स, क्रेडेंशियल वाला रिस्पॉन्स दिखा सकता है.
  5. इसके बाद, हमलावर स्पेक्टर हमले का इस्तेमाल करके, अपने हिसाब से बनाए गए संसाधन को पढ़ सकता है.

वेब ब्राउज़र का एचटीटीपी कैश मेमोरी में इस तरह का हमला होने की अनुमति नहीं देता, लेकिन ब्राउज़र के कंट्रोल से बाहर कुछ और कैश मौजूद होते हैं. यही वजह है कि यह हमला सफल हो सकता है.

एचटीटीपी कैश मेमोरी के बारे में आम ग़लतफ़हमियां

1. संसाधनों को सिर्फ़ ब्राउज़र से कैश मेमोरी में सेव किया जाता है

कैश मेमोरी में अक्सर कई लेयर होती हैं. कुछ कैश मेमोरी सिर्फ़ एक उपयोगकर्ता के लिए होती है और कुछ कैश मेमोरी में सेव एक से ज़्यादा उपयोगकर्ताओं के लिए होती है. कुछ को सर्वर कंट्रोल करता है, कुछ को उपयोगकर्ता कंट्रोल करते हैं, और कुछ इंटरमीडियरी कंट्रोल करते हैं.

  • ब्राउज़र की कैश मेमोरी. इन कैश का मालिकाना हक सिर्फ़ एक उपयोगकर्ता के पास होता है. ये कैश मेमोरी का इस्तेमाल, उनके वेब ब्राउज़र में लागू किया जाता है. ये परफ़ॉर्मेंस को बेहतर बनाते हैं. ये एक ही जवाब को कई बार फ़ेच करने से बचते हैं.
  • लोकल प्रॉक्सी. ऐसा हो सकता है कि इसे उपयोगकर्ता ने इंस्टॉल किया हो, लेकिन इसे मध्यस्थों के ज़रिए भी मैनेज किया जा सकता है: उनकी कंपनी, उनका संगठन या इंटरनेट सेवा देने वाली कंपनी. लोकल प्रॉक्सी, अक्सर कई उपयोगकर्ताओं के लिए एक रिस्पॉन्स को कैश मेमोरी में सेव करती हैं, जो कि "सार्वजनिक" कैश मेमोरी होती है. स्थानीय प्रॉक्सी की कई भूमिकाएं होती हैं.
  • ऑरिजिन सर्वर कैश / सीडीएन. इसे सर्वर कंट्रोल करता है. ऑरिजिन सर्वर कैश मेमोरी का मकसद ऑरिजिन सर्वर पर लोड को कम करना होता है. इसके लिए, एक से ज़्यादा उपयोगकर्ताओं के लिए एक ही रिस्पॉन्स कैश मेमोरी में सेव किया जाता है. सीडीएन के लक्ष्य एक जैसे होते हैं, लेकिन वे दुनिया भर में लागू होते हैं. साथ ही, इंतज़ार का समय कम करने के लिए, इन्हें उपयोगकर्ताओं के सबसे करीबी ग्रुप को असाइन किया जाता है.
ब्राउज़र और सर्वर के बीच कैश मेमोरी की कई लेयर होती हैं.
ब्राउज़र और सर्वर के बीच कैश मेमोरी में कई लेयर हो सकती हैं. उदाहरण के लिए, आपको सर्वर कैश के बाद, सीडीएन और ब्राउज़र की कैश मेमोरी मिल सकती है. सीडीएन और ब्राउज़र कैश मेमोरी के बीच लोकल प्रॉक्सी सेट अप भी हो सकता है.

2. एसएसएल, मध्यस्थों को एचटीटीपीएस संसाधनों को कैश मेमोरी में सेव करने से रोकता है

कई उपयोगकर्ता, स्थानीय तौर पर कॉन्फ़िगर की गई प्रॉक्सी का इस्तेमाल नियमित तौर पर ऐक्सेस के लिए, जैसे कि सीमित डेटा वाला कनेक्शन शेयर करने, वायरस की जांच करने या डेटा लीक होने की रोकथाम (डीएलपी) करने के लिए करते हैं. इंटरमीडियरी कैश मेमोरी, TLS इंटरसेप्शन कर रही है.

इंटरमीडियरी कैश, अक्सर कंपनी के कर्मचारी के वर्कस्टेशन पर इंस्टॉल होता है. वेब ब्राउज़र इस तरह से कॉन्फ़िगर किए जाते हैं कि वे लोकल प्रॉक्सी के सर्टिफ़िकेट पर भरोसा कर सकें.

कुछ एचटीटीपीएस संसाधनों को इन लोकल प्रॉक्सी की मदद से कैश मेमोरी में सेव किया जा सकता है.

एचटीटीपी कैश मेमोरी कैसे काम करती है

  • किसी भी तरीके से रिसॉर्स को डिफ़ॉल्ट रूप से कैश मेमोरी में सेव किया जा सकता है.
  • मुख्य कैश कुंजी में यूआरएल और तरीका शामिल होता है. (यूआरएल, तरीका)
  • सेकंडरी कैश कुंजी, Vary हेडर में शामिल किए गए हेडर होती है. Vary: Cookie से पता चलता है कि जवाब, Cookie पर निर्भर करता है.
  • Cache-Control हेडर, बेहतर कंट्रोल देता है.

अच्छी क्वालिटी वाली वेबसाइटों के डेवलपर को सुरक्षा को बेहतर करने के लिए अभी कदम उठाने चाहिए. इनमें ज़्यादा ट्रैफ़िक वाली वेबसाइटें और पहचान ज़ाहिर करने वाली निजी जानकारी से इंटरैक्ट करने वाली वेबसाइटें शामिल हैं.

सबसे बड़ा जोखिम तब होता है, जब कुकी के हिसाब से किसी संसाधन तक पहुंच अलग-अलग हो. कोई मध्यस्थ कैश मेमोरी में सेव किए गए कोड से, कुकी से अनुरोध किया गया जवाब वापस आ सकता है.

हमारा सुझाव है कि आप इनमें से कोई एक तरीका अपनाएं:

  • मध्यस्थों को संसाधन को कैश मेमोरी में सेव करने से रोकें. Cache-Control: private सेट करें.
  • सही सेकंडरी कैश कुंजी सेट करें. अगर कुकी की वजह से रिस्पॉन्स अलग-अलग है, तो Vary: Cookie को सेट करें. ऐसा कुकी स्टोर करने के दौरान हो सकता है.

खास तौर पर, डिफ़ॉल्ट व्यवहार बदलें: हमेशा Cache-Control या Vary को तय करें.

अन्य जानकारी

एचटीटीपी कैश का इस्तेमाल करके इस तरह के दूसरे तरह के हमले भी किए जा सकते हैं, लेकिन ये क्रॉस-ऑरिजिन-आइसोलेशन से अलग तरीके पर निर्भर होते हैं. उदाहरण के लिए, जेक आर्चिबाल्ड ने सीओआरएस में जीतने के तरीके में कुछ हमलों के बारे में बताया है.

इन हमलों को कुछ ऐसे वेब ब्राउज़र कम करते हैं जो अपनी एचटीटीपी कैश मेमोरी को दो हिस्सों में बांटते हैं. यह इस बात पर निर्भर करता है कि रिसॉर्स रिस्पॉन्स का अनुरोध क्रेडेंशियल से किया गया था या नहीं. साल 2022 तक, Firefox कैश मेमोरी को अलग-अलग हिस्सों में बांटता है, जबकि Chrome और Safari नहीं करता. Chrome आने वाले समय में कैश मेमोरी को अलग कर सकता है. ध्यान दें कि ये हमले, टॉप लेवल ऑरिजिन के हिसाब से बांटने से अलग और अनुपूरक होते हैं.

भले ही, इस समस्या को वेब ब्राउज़र के लिए कम किया जा सकता हो, लेकिन समस्या लोकल प्रॉक्सी कैश में बनी रहेगी. इसलिए, हमारा सुझाव है कि आप अब भी ऊपर दिए गए सुझावों का पालन करें.


Unsplash पर बेन पैटिनसन की हेडर फ़ोटो.