HTTP कुकी कैसे काम करती हैं?
कुकी एक छोटा name=value जोड़ा है जिसे सर्वर Set-Cookie हेडर से सेट करता है और ब्राउज़र उसी साइट को बाद की रिक्वेस्ट में लौटाता है — इसी से स्टेटलेस HTTP रिक्वेस्ट के बीच सेशन बना रहता है। उसके एट्रिब्यूट पहुँच और सुरक्षा तय करते हैं: Expires/Max-Age (अवधि), Domain और Path (स्कोप), Secure (केवल HTTPS), HttpOnly (JavaScript से छिपा) और SameSite (क्रॉस-साइट भेजना)।
सुरक्षा नोट: Secure और HttpOnly के बिना सेशन कुकी सादे HTTP पर या इंजेक्ट की गई स्क्रिप्ट से चुराई जा सकती है। हर ऑथेंटिकेशन कुकी के एट्रिब्यूट जाँचें, और यह भी कि लॉगिन के बाद सेशन id बदलता है।
कुकी एनालाइज़र कैसे इस्तेमाल करें
- हर पंक्ति में एक Set-Cookie हेडर पेस्ट करें ("Set-Cookie:" प्रीफ़िक्स ज़रूरी नहीं) या पूरा कच्चा रिस्पॉन्स डाल दें।
- नतीजे लाइव अपडेट होते हैं: कुकी तालिका एट्रिब्यूट, आयु और साइज़ का सार दिखाती है।
- फ़ाइंडिंग पर उच्च से निम्न गंभीरता के क्रम में काम करें; हर एक के साथ सुझाया गया समाधान दिया है।
- मज़बूत किए गए हेडर कॉपी करें और जिन कुकी को स्क्रिप्ट पढ़ती हैं, उनके लिए HttpOnly समायोजित करें।
कुकी एनालाइज़र की खूबियाँ
- किसी भी संख्या में Set-Cookie हेडर पार्स करता है, कच्चे रिस्पॉन्स या curl -i आउटपुट सहित
- हर एट्रिब्यूट समझाता है: Secure, HttpOnly, SameSite, Domain, Path, Expires, Max-Age, Partitioned, Priority
- नियम: SameSite=None के लिए Secure ज़रूरी, __Host-/__Secure- प्रीफ़िक्स की शर्तें, public-suffix डोमेन, अमान्य तारीख़ें, 400 दिन की अधिकतम आयु, 4096 बाइट की साइज़ सीमा
- जो कुकी session, token या CSRF सीक्रेट लगती हैं, उन पर ज़्यादा सख़्त जाँच
- हर कुकी का अपना स्कोर और एक कुल स्कोर, गंभीरता के क्रम में लगी फ़ाइंडिंग के साथ
- कॉपी-पेस्ट के लिए तैयार, मज़बूत बनाए गए Set-Cookie हेडर
कुकी एनालाइज़र का उदाहरण
Secure के बिना एक session कुकी
इनपुट:
Set-Cookie: sessionId=a3f9c2e1b7d4; Path=/; HttpOnlyआउटपुट:
sessionId · Secure: no · HttpOnly: yes · SameSite: (default Lax) · Lifetime: session · Score: 55
High — Missing Secure: the cookie can be sent over plain HTTP and intercepted.
Medium — No SameSite attribute: set it explicitly.
Hardened: Set-Cookie: sessionId=a3f9c2e1b7d4; Path=/; Secure; HttpOnly; SameSite=Laxकुकी एनालाइज़र के बारे में अक्सर पूछे जाने वाले सवाल
__Host- और __Secure- प्रीफ़िक्स क्या हैं?
__Secure- के लिए Secure एट्रिब्यूट ज़रूरी है; __Host- में इसके अलावा Domain मना है और Path=/ अनिवार्य है, जिससे कुकी ठीक एक होस्ट से बँध जाती है। इन नियमों को तोड़ने वाली प्रीफ़िक्स कुकी ब्राउज़र अस्वीकार कर देते हैं।
SameSite=None के लिए Secure क्यों ज़रूरी है?
Secure के बिना SameSite=None वाली कुकी ब्राउज़र गिरा देते हैं। None सिर्फ़ वाजिब cross-site इस्तेमाल के लिए चाहिए, जैसे एम्बेड किए गए विजेट या थर्ड-पार्टी SSO।
कुकी कितनी बड़ी हो सकती है?
नाम, वैल्यू और एट्रिब्यूट मिलाकर लगभग 4096 बाइट प्रति कुकी; ब्राउज़र प्रति डोमेन कुकी की संख्या भी सीमित रखते हैं। session डेटा सर्वर पर रखें और कुकी में सिर्फ़ एक पहचानकर्ता संग्रहित करें।
स्कोर का क्या मतलब है?
100 में से कटौती: हर उच्च गंभीरता की फ़ाइंडिंग पर 30 और हर मध्यम पर 15 अंक। session या auth कुकी को preference कुकी के मुक़ाबले ज़्यादा सख़्ती से आँका जाता है।
क्या मैं पूरा रिस्पॉन्स पेस्ट कर सकता हूँ?
हाँ — टूल कच्चे रिस्पॉन्स या curl -i आउटपुट में से हर Set-Cookie हेडर निकाल लेता है। कुछ भी आपके ब्राउज़र से बाहर नहीं जाता।
तकनीकी नोट्स
पार्सिंग RFC 6265bis के अनुसार होती है: पहला name=value जोड़ा ही कुकी है और उसके बाद सेमीकोलन से अलग किए गए टोकन एट्रिब्यूट हैं, जिनका मिलान case-insensitive तरीक़े से होता है। अनजान एट्रिब्यूट भी बताए जाते हैं, क्योंकि ब्राउज़र उन्हें चुपचाप अनदेखा कर देते हैं — टाइपो की वजह से आने वाली "SameSite लागू क्यों नहीं हुआ" जैसी बग यहीं से जन्म लेती हैं।
जब किसी प्रॉक्सी ने कई Set-Cookie हेडर जोड़कर एक कॉमा-सेपरेटेड वैल्यू बना दी हो, तो एनालाइज़र उन्हें फिर से अलग कर देता है और Expires तारीख़ें (जिनमें कॉमा होता है) ज्यों की त्यों बनी रहती हैं।
संदर्भ
- RFC 6265: HTTP State Management Mechanismकुकी कैसे सेट और भेजी जाती हैं: Set-Cookie के एट्रिब्यूट (Expires, Max-Age, Domain, Path, Secure, HttpOnly) और उनके स्कोप नियम।
- Using HTTP cookies — MDNकुकी की अवधि, स्कोप, Secure/HttpOnly/SameSite एट्रिब्यूट और उनके सुरक्षा निहितार्थ।
- OWASP Cheat Sheet Series: Session Managementसेशन आइडेंटिफ़ायर की एंट्रॉपी, कुकी एट्रिब्यूट, एक्सपायरी, लॉगिन के बाद नवीनीकरण और लॉगआउट हैंडलिंग।