यदि कुकीज़ के आधार पर एक्सेस प्रतिबंधों वाली साइट पर AJAX का उपयोग किया जाता है, तो जावास्क्रिप्ट को कुकीज़ तक पहुंच की आवश्यकता होती है। क्या AJAX की साइट पर HttpOnly कुकी काम करेगी?
संपादित करें: यदि HttpOnly निर्दिष्ट किया गया है तो Microsoft ने जावास्क्रिप्ट तक कुकीज़ तक पहुंच को रोककर XSS हमलों को रोकने का एक तरीका बनाया है। बाद में फायरफॉक्स ने इसे अपनाया। तो मेरा सवाल है: यदि आप एक साइट पर AJAX का उपयोग कर रहे हैं, जैसे कि StackOverflow, तो क्या Http- केवल कुकीज़ एक विकल्प हैं?
संपादित करें 2: प्रश्न 2. अगर HttpOnly का उद्देश्य जावास्क्रिप्ट को कुकीज़ तक पहुंच से रोकना है, और आप अभी भी XmlHttpRequest ऑब्जेक्ट के माध्यम से जावास्क्रिप्ट के माध्यम से कुकीज़ को पुनः प्राप्त कर सकते हैं, तो HttpOnly का क्या मतलब है ?
संपादित 3: यहाँ विकिपीडिया से एक उद्धरण है:
जब ब्राउज़र को इस तरह की कुकी प्राप्त होती है, तो इसे निम्न HTTP एक्सचेंजों में सामान्य रूप से उपयोग करने के लिए माना जाता है, लेकिन इसे क्लाइंट-साइड स्क्रिप्ट के लिए दृश्यमान बनाने के लिए नहीं। [32]
HttpOnly
झंडा किसी भी मानक का हिस्सा नहीं है, और सभी ब्राउज़रों में लागू नहीं है। ध्यान दें कि वर्तमान में एक XMLHTTPRequest के माध्यम से सत्र कुकी पढ़ने या लिखने की कोई रोकथाम नहीं है। [33]।
document.cookie
जब आप HttpOnly का उपयोग करते हैं तो मुझे समझ में आता है कि यह अवरुद्ध है। लेकिन ऐसा लगता है कि आप अभी भी XMLHttpRequest ऑब्जेक्ट में कुकी मान पढ़ सकते हैं, XSS के लिए अनुमति देता है। HttpOnly आपको कैसे किसी से अधिक सुरक्षित बनाता है? कुकीज़ बनाकर अनिवार्य रूप से केवल पढ़ा जाता है?
आपके उदाहरण में, मैं आपको नहीं लिख सकता document.cookie
, लेकिन मैं अभी भी आपकी कुकी चुरा सकता हूं और XMLHttpRequest ऑब्जेक्ट का उपयोग करके अपने डोमेन पर पोस्ट कर सकता हूं।
<script type="text/javascript">
var req = null;
try { req = new XMLHttpRequest(); } catch(e) {}
if (!req) try { req = new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) {}
if (!req) try { req = new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) {}
req.open('GET', 'http://stackoverflow.com/', false);
req.send(null);
alert(req.getAllResponseHeaders());
</script>
संपादित करें 4: क्षमा करें, मेरा मतलब था कि आप XMLHttpRequest को StackOverflow डोमेन पर भेज सकते हैं, और उसके बाद getAllResponseHeaders () के परिणाम को एक स्ट्रिंग में सहेजें, कुकी को बाहर निकालें, और उसके बाद किसी बाहरी डोमेन पर पोस्ट करें। ऐसा प्रतीत होता है कि विकिपीडिया और हाकर्स इस पर मेरे साथ रहते हैं, लेकिन मैं फिर से शिक्षित होना पसंद करूंगा ...
अंतिम संपादन: आह, जाहिरा तौर पर दोनों साइटें गलत हैं, यह वास्तव में फायरफॉक्स में एक बग है । IE6 और 7 वास्तव में एकमात्र ब्राउज़र हैं जो वर्तमान में पूरी तरह से HttpOnly का समर्थन करते हैं।
मैंने जो कुछ सीखा है, उसे दोहराना:
- HttpOnly IE7 और FireFox में दस्तावेज़ के लिए सभी पहुँच को प्रतिबंधित करता है और फ़ायरफ़ॉक्स (अन्य ब्राउज़रों के बारे में निश्चित नहीं)
- HttpOnly IE7 में XMLHttpObject.getAllResponseHeaders () में प्रतिक्रिया हेडर से कुकी जानकारी निकालता है।
- XMLHttpObjects केवल वे डोमेन से सबमिट किए जा सकते हैं, जिनसे वे उत्पन्न हुए हैं, इसलिए कुकीज़ का कोई क्रॉस-डोमेन पोस्टिंग नहीं है।
संपादित करें: यह जानकारी अब तक की नहीं है।