Cache-Control हेडर को भूल जाने या उसका गलत इस्तेमाल करने से, आपकी वेबसाइट की सुरक्षा और उपयोगकर्ताओं की निजता पर बुरा असर पड़ सकता है.
डिफ़ॉल्ट रूप से, संसाधनों को किसी भी तरह के कैश मेमोरी में कैश मेमोरी में हमेशा सेव किया जा सकता है.
Cache-Control
हेडर का इस्तेमाल न करने या उसका गलत इस्तेमाल करने से, आपकी वेबसाइट की सुरक्षा और उपयोगकर्ताओं की निजता पर बुरा असर पड़ सकता है.
अगर आपको निजी जवाबों को निजी रखना है, तो हमारा सुझाव है कि:
- इंटरमीडियरी को संसाधन को कैश मेमोरी में सेव करने से रोकना.
Cache-Control: private
सेट करें. - सही सेकंडरी कैश मेमोरी की कुंजी सेट करें.
अगर कुकी की वजह से जवाब अलग-अलग होता है, तो
Vary: Cookie
सेट करें. ऐसा तब हो सकता है, जब कुकी में क्रेडेंशियल सेव किए जाते हैं.
इस बारे में जानने के लिए आगे पढ़ें कि यह क्यों ज़रूरी है. साथ ही, यह भी जानें:
- सुरक्षा और निजता से जुड़ी ऐसी समस्याएं जिनके बारे में शायद आप न जानते हों
- एचटीटीपी कैश मेमोरी के अलग-अलग टाइप और आम गलतफ़हमियां
- अहम वेबसाइटों के लिए सुझाई गई कार्रवाइयां
कैश मेमोरी से जुड़ी सुरक्षा और निजता से जुड़े जोखिम
Spectre के जोखिम से जुड़े लीक किए गए संसाधन
Spectre के ज़रिए होने वाली सुरक्षा से जुड़ी समस्या की वजह से, किसी पेज को ओएस प्रोसेस की मेमोरी को पढ़ने की अनुमति मिलती है. इसका मतलब है कि हमलावर, क्रॉस-ऑरिजिन डेटा को बिना अनुमति के ऐक्सेस कर सकता है. इस वजह से, आधुनिक वेब ब्राउज़र ने क्रॉस-ऑरिजिन आइसोलेशन वाले पेजों पर, अपनी कुछ सुविधाओं के इस्तेमाल पर पाबंदी लगा दी है. जैसे, SharedArrayBuffer
या हाई रिज़ॉल्यूशन टाइमर.
आधुनिक वेब ब्राउज़र, क्रॉस-ऑरिजिन एम्बेडर नीति (सीओईपी) को लागू करते हैं. इससे यह पक्का होता है कि क्रॉस-ओरिजिन रिसोर्स:
- सार्वजनिक संसाधन, जिनका अनुरोध कुकी के बिना किया गया है
- ऐसे संसाधन जिन्हें सीओआरएस या CORP हेडर के ज़रिए, क्रॉस-ऑरिजिन शेयर करने की अनुमति मिली है
सीओईपी सेटअप करने से, हमलावर को Spectre का गलत इस्तेमाल करने से नहीं रोका जा सकता. हालांकि, इससे यह पक्का होता है कि क्रॉस-ऑरिजिन संसाधन, हमलावर के लिए काम के नहीं हैं (जब ब्राउज़र उन्हें सार्वजनिक संसाधन के तौर पर लोड करता है) या हमलावर के साथ शेयर नहीं किए जा सकते (जब उन्हें CORP: cross-origin
के साथ शेयर किया जाता है).
एचटीटीपी कैश मेमोरी से Spectre पर क्या असर पड़ता है?
अगर Cache-Control
हेडर सही तरीके से सेट नहीं है, तो हमलावर हमला कर सकता है. उदाहरण के लिए:
- क्रेडेंशियल वाला रिसॉर्स कैश मेमोरी में सेव किया जाता है.
- हमलावर, क्रॉस-ऑरिजिन आइसोलेटेड पेज लोड करता है.
- हमलावर, संसाधन का फिर से अनुरोध करता है.
COEP:credentialless
को ब्राउज़र सेट करता है, इसलिए रिसॉर्स को कुकी के बिना फ़ेच किया जाता है. हालांकि, कैश मेमोरी में क्रेडेंशियल वाला रिस्पॉन्स सेव हो सकता है.- इसके बाद, हमलावर Spectre का इस्तेमाल करके, उपयोगकर्ता के हिसाब से बनाए गए संसाधन को पढ़ सकता है.
हालांकि, वेब ब्राउज़र का एचटीटीपी कैश, इस तरह के हमले को होने से रोकता है, लेकिन ब्राउज़र के कंट्रोल में अतिरिक्त कैश मौजूद होते हैं. इससे, इस हमले को पूरा होने में मदद मिल सकती है.
एचटीटीपी कैश मेमोरी के बारे में आम गलतफ़हमियां
1. रिसॉर्स सिर्फ़ ब्राउज़र में कैश मेमोरी में सेव किए जाते हैं
आम तौर पर, कैश मेमोरी में कई लेयर होती हैं. कुछ कैश मेमोरी, किसी एक उपयोगकर्ता के लिए होती हैं और कुछ कई उपयोगकर्ताओं के लिए. कुछ कुकी को सर्वर कंट्रोल करता है, कुछ को उपयोगकर्ता और कुछ को मध्यस्थ.
- ब्राउज़र कैश मेमोरी. इन कैश मेमोरी का मालिकाना हक किसी एक उपयोगकर्ता के पास होता है. साथ ही, ये कैश मेमोरी उसके वेब ब्राउज़र में सेव होती हैं. ये एक ही रिस्पॉन्स को कई बार फ़ेच करने से बचकर, परफ़ॉर्मेंस को बेहतर बनाते हैं.
- लोकल प्रॉक्सी. ऐसा हो सकता है कि उपयोगकर्ता ने इसे इंस्टॉल किया हो, लेकिन इसे मध्यस्थ भी मैनेज कर सकते हैं: उनकी कंपनी, उनका संगठन या इंटरनेट सेवा देने वाली कंपनी. लोकल प्रॉक्सी, अक्सर एक से ज़्यादा उपयोगकर्ताओं के लिए एक ही रिस्पॉन्स को कैश मेमोरी में सेव करती हैं. इसे "सार्वजनिक" कैश मेमोरी कहा जाता है. लोकल प्रॉक्सी की कई भूमिकाएं होती हैं.
- ऑरिजिन सर्वर कैश मेमोरी / सीडीएन. इसे सर्वर कंट्रोल करता है. ऑरिजिन सर्वर कैश मेमोरी का मकसद, कई उपयोगकर्ताओं के लिए एक ही जवाब को कैश मेमोरी में सेव करके, ऑरिजिन सर्वर पर लोड को कम करना है. सीडीएन के लक्ष्य एक जैसे होते हैं, लेकिन ये दुनिया भर में मौजूद होते हैं. साथ ही, ये उपयोगकर्ताओं के सबसे नज़दीकी सेट को असाइन किए जाते हैं, ताकि लैटेंसी कम हो.

2. एसएसएल, एचटीटीपीएस रिसॉर्स को कैश मेमोरी में सेव करने से रोकता है
कई उपयोगकर्ता, स्थानीय तौर पर कॉन्फ़िगर की गई प्रॉक्सी का नियमित तौर पर इस्तेमाल करते हैं. भले ही, इसका इस्तेमाल ऐक्सेस करने के लिए किया जा रहा हो, जैसे कि मेज़र किए गए कनेक्शन को शेयर करना, वायरस की जांच करना या डेटा लीक होने से रोकने (डीएलपी) के लिए. इंटरमीडियरी कैश, टीएलएस इंटरसेप्शन कर रहा है.
इंटरमीडियरी कैश मेमोरी, अक्सर कंपनी के कर्मचारी के वर्कस्टेशन पर इंस्टॉल की जाती है. वेब ब्राउज़र को लोकल प्रॉक्सी के सर्टिफ़िकेट पर भरोसा करने के लिए कॉन्फ़िगर किया जाता है.
आखिर में, इन लोकल प्रॉक्सी से कुछ एचटीटीपीएस संसाधन कैश मेमोरी में सेव किए जा सकते हैं.
एचटीटीपी कैश मेमोरी कैसे काम करती है
- डिफ़ॉल्ट रूप से, संसाधनों को कैश मेमोरी में सेव करने की अनुमति अनजाने में मिल जाती है.
- प्राइमरी कैश मेमोरी कुंजी में यूआरएल और तरीका शामिल होता है. (यूआरएल, तरीका)
- सेकंडरी कैश
की,
Vary
हेडर में शामिल हेडर होते हैं.Vary: Cookie
से पता चलता है कि रिस्पॉन्सCookie
पर निर्भर करता है. Cache-Control
हेडर से, ज़्यादा बेहतर तरीके से कंट्रोल किया जा सकता है.
अपनी वेबसाइट के लिए, सुझाई गई इन कार्रवाइयों को अपनाएं
ज़्यादा ट्रैफ़िक वाली और पहचान से जुड़ी निजी जानकारी के साथ इंटरैक्ट करने वाली वेबसाइटों के डेवलपर को, सुरक्षा को बेहतर बनाने के लिए अभी कार्रवाई करनी चाहिए.
सबसे ज़्यादा जोखिम तब होता है, जब किसी रिसॉर्स का ऐक्सेस, कुकी के आधार पर अलग-अलग हो. अगर कोई रोकथाम करने वाली कार्रवाई नहीं की गई है, तो इंटरमीडियरी कैश मेमोरी, ऐसे अनुरोध का जवाब दे सकती है जिसके लिए कुकी का इस्तेमाल किया गया था.
हमारा सुझाव है कि आप इनमें से कोई एक तरीका अपनाएं:
- इंटरमीडियरी को संसाधन को कैश मेमोरी में सेव करने से रोकना.
Cache-Control: private
सेट करें. - सही सेकंडरी कैश मेमोरी की कुंजी सेट करें.
अगर कुकी की वजह से जवाब अलग-अलग होता है, तो
Vary: Cookie
सेट करें. ऐसा तब हो सकता है, जब कुकी में क्रेडेंशियल सेव किए जाते हैं.
खास तौर पर, डिफ़ॉल्ट तरीके को बदलें: हमेशा Cache-Control
या
Vary
तय करें.
ज़रूरी बातें
एचटीटीपी कैश का इस्तेमाल करके, इस तरह के और भी हमले किए जा सकते हैं. हालांकि, ये हमले क्रॉस-ऑरिजिन-आइसोलेशन के बजाय, किसी दूसरे तरीके पर निर्भर करते हैं. उदाहरण के लिए, जैक अर्चबाल्ड ने CORS में जीतने का तरीका लेख में कुछ अटैक के बारे में बताया है.
इन हमलों को कुछ वेब ब्राउज़र कम कर देते हैं. ये ब्राउज़र, अपने एचटीटीपी कैश मेमोरी को इस आधार पर बांटते हैं कि रिसॉर्स के जवाब का अनुरोध, क्रेडेंशियल के साथ किया गया था या नहीं. साल 2022 तक, Firefox कैश को अलग-अलग सेक्शन में बांटता है, जबकि Chrome और Safari ऐसा नहीं करते. Chrome आने वाले समय में कैश मेमोरी को अलग-अलग कर सकता है. ध्यान दें कि ये हमले अलग-अलग होते हैं और इन्हें टॉप-लेवल ऑरिजिन के हिसाब से बांटने के साथ-साथ इस्तेमाल किए जाते हैं.
भले ही, वेब ब्राउज़र के लिए इस समस्या को कम किया जा सकता है, लेकिन यह समस्या लोकल प्रॉक्सी कैश मेमोरी में बनी रहेगी. इसलिए, हमारा सुझाव है कि आप ऊपर दिए गए सुझावों को अपनाएं.
Unsplash पर बेन पैटिसन की ओर से दी गई हेडर फ़ोटो.