X-Requested-With शीर्ष लेख का क्या मतलब है?


224

JQuery और अन्य चौखटे निम्नलिखित शीर्ष लेख जोड़ते हैं:

X-Requested-With: XMLHttpRequest

इसकी आवश्यकता क्यों है? एक सर्वर सामान्य अनुरोधों की तुलना में AJAX अनुरोधों का इलाज क्यों करना चाहेगा?

अद्यतन : मैं सिर्फ इस शीर्षक का उपयोग कर एक वास्तविक जीवन उदाहरण मिला: https://core.spreedly.com/manual/payment-methods/adding-with-js । यदि AJAX के बिना भुगतान प्रोसेसर का अनुरोध किया जाता है, तो यह मूल वेबसाइट पर वापस भेज देता है जब यह किया जाता है। जब यह AJAX के साथ अनुरोध किया जाता है, तो कोई पुनर्निर्देशन नहीं किया जाता है।


7
"[जब] AJAX के बिना अनुरोध किया जाता है, तो यह मूल वेबसाइट पर वापस हो जाता है जब यह किया जाता है। जब AJAX के साथ अनुरोध किया जाता है, तो कोई पुनर्निर्देशन नहीं किया जाता है।" -> यही कारण है कि आप इसे करना चाहते हैं। :)
राबर्ट क्रिश्चियन

जवाबों:


257

सुरक्षा का एक अच्छा कारण है - यह CSRF के हमलों को रोक सकता है क्योंकि इस शीर्षक को सर्वर के सहमति के बिना AJAX अनुरोध क्रॉस डोमेन में नहीं जोड़ा जा सकता है

केवल निम्नलिखित हेडर को क्रॉस डोमेन की अनुमति है:

  • स्वीकार करना
  • स्वीकार करें-भाषा
  • सामग्री-भाषा
  • अंतिम-घटना-आईडी
  • सामग्री प्रकार

कोई भी अन्य व्यक्ति "पूर्व उड़ान" का अनुरोध कॉर्स समर्थित ब्राउज़रों में जारी करता है।

कॉर्स के बिना X-Requested-Withक्रॉस डोमेन XHR अनुरोध में जोड़ना संभव नहीं है ।

यदि सर्वर जाँच कर रहा है कि यह हेडर मौजूद है, तो यह जानता है कि अनुरोध जावास्क्रिप्ट के साथ उपयोगकर्ता की ओर से अनुरोध करने के लिए हमलावर के डोमेन से आरंभ नहीं हुआ था। यह भी जांचता है कि अनुरोध नियमित HTML फॉर्म से पोस्ट नहीं किया गया था, जिसमें से यह सत्यापित करना कठिन है कि टोकन के उपयोग के बिना क्रॉस डोमेन नहीं है। (हालांकि, हेडर की जाँचOrigin समर्थित ब्राउज़रों में एक विकल्प हो सकता है, हालाँकि आप पुराने ब्राउज़र को असुरक्षित छोड़ देंगे ।)

नई फ्लैश बाईपास की खोज की

आप इसे एक टोकन के साथ संयोजित करना चाह सकते हैं , क्योंकि OSX पर सफारी चलाने पर फ्लैश इस हेडर को सेट कर सकता है यदि कोई रीडायरेक्ट चरण है । ऐसा प्रतीत होता है कि यह क्रोम पर भी काम करता था , लेकिन अब इसे हटा दिया गया है। विभिन्न संस्करणों सहित यहां और अधिक विवरण प्रभावित हैं।

OWASP इसे उत्पत्ति और संदर्भ जाँच के साथ संयोजित करने की सलाह देते हैं :

यह रक्षा तकनीक विशेष रूप से क्रॉस-साइट रिक्वेस्ट फॉरगिरी के लिए रोबस्ट डिफेंस की धारा 4.3 में चर्चा की गई है। हालांकि, फ्लैश का उपयोग कर इस रक्षा के बायपास को 2008 के शुरू में और फिर से हाल ही में 2015 के रूप में मैथियास कार्लसन द्वारा Vimeo में एक सीएसआरएफ दोष का फायदा उठाने के लिए प्रलेखित किया गया था। लेकिन, हम मानते हैं कि फ्लैश अटैक ओरिजिनल या रेफर हेडर को खराब नहीं कर सकता है, इसलिए हम दोनों की जाँच करके मानते हैं कि चेकों का यह संयोजन फ़्लैश बायपास CSRF हमलों को रोकना चाहिए। (नोट: यदि कोई भी इस विश्वास की पुष्टि या खंडन कर सकता है, तो कृपया हमें बताएं ताकि हम इस लेख को अपडेट कर सकें)

हालांकि, पहले से ही चर्चा की गई उत्पत्ति के कारणों के लिए मुश्किल हो सकता है।

अपडेट करें

कोर, सीएसआरएफ और एक्स-रिक्वेस्टेड-विथ पर गहराई से ब्लॉग पोस्ट में और अधिक लिखा ।


14
मुझे नहीं मिला। हमलावर को अनुरोध बनाने और X-Requested-Withहेडर जोड़ने से भी रोकता है ?
ग्रेग

13
@Greg: ब्राउज़र - यह इसे क्रॉस-डोमेन की अनुमति नहीं देगा।
सिल्वरलाइटफॉक्स

2
ओह, मुझे नहीं पता था कि जब तक आप एक ही डोमेन पर होंगे तब तक किसी भी कॉर्स कॉन्फिग की जरूरत नहीं होगी। हालांकि यह स्पष्ट है जब आप इसके बारे में सोचते हैं। धन्यवाद !
ग्रेग

10
@ vol7ron: कुछ भी उन्हें रोकता नहीं है, लेकिन फिर उनके पास अनुरोध में उनके शिकार के कुकीज़ नहीं होंगे जो अनुरोध करने के लिए उन्हें वस्तु को हरा देता है। CSRF को सफल होने के लिए, हमलावर को अनुरोध के साथ स्वचालित रूप से कुकीज़ संलग्न करने के लिए ब्राउज़र की आवश्यकता होगी, इसलिए ब्राउज़र के बिना CSRF हमला नहीं होता है।
सिल्वरलाइटफॉक्स

3
@ vol7ron: पूर्व। CSRF एक भ्रमित डिप्टी समस्या है। ब्राउज़र उलझा हुआ डिप्टी है और उपयोगकर्ता को स्वयं नहीं बनाने के अनुरोध के लिए कुकीज़ भेजने में "छल" किया गया है।
सिल्वरलाइटफॉक्स

25

सुनिश्चित करें कि आपने SilverlightFox का उत्तर पढ़ा है। यह एक अधिक महत्वपूर्ण कारण पर प्रकाश डालता है।

इसका कारण ज्यादातर यह है कि यदि आप किसी अनुरोध के स्रोत को जानते हैं तो आप इसे थोड़ा अनुकूलित करना चाहते हैं।

उदाहरण के लिए, मान लें कि आपके पास एक वेबसाइट है जिसमें कई व्यंजन हैं। और आप एक कस्टम jQuery फ्रेमवर्क का उपयोग करते हुए एक लिंक पर आधारित कंटेनर में व्यंजनों को स्लाइड करते हैं। लिंक हो सकता हैwww.example.com/recipe/apple_pie

अब आम तौर पर एक पूर्ण पृष्ठ, शीर्ष लेख, पाद लेख, नुस्खा सामग्री और विज्ञापन देता है। लेकिन अगर कोई आपकी वेबसाइट को ब्राउज़ कर रहा है तो उनमें से कुछ हिस्से पहले ही लोड हो चुके हैं। इसलिए आप उपयोगकर्ता द्वारा चुनी गई रेसिपी को प्राप्त करने के लिए AJAX का उपयोग कर सकते हैं लेकिन समय और बैंडविड्थ को बचाने के लिए हेडर / फूटर / विज्ञापनों को लोड नहीं करते हैं।

अब आप केवल डेटा के लिए एक द्वितीयक समापन बिंदु लिख सकते हैं, www.example.com/recipe_only/apple_pieलेकिन इसे बनाए रखना और अन्य लोगों को साझा करना कठिन है।

लेकिन यह सिर्फ पता लगाना आसान है कि यह एक अजाक्स अनुरोध है जो अनुरोध करता है और फिर डेटा का केवल एक हिस्सा वापस करता है। इस तरह उपयोगकर्ता कम बैंडविड्थ बर्बाद करता है और साइट अधिक संवेदनशील दिखाई देती है।

फ्रेमवर्क सिर्फ हेडर जोड़ते हैं क्योंकि कुछ को यह ट्रैक रखने के लिए उपयोगी हो सकता है कि कौन से अनुरोध अजाक्स हैं और जो नहीं हैं। लेकिन यह पूरी तरह से ऐसी तकनीकों का उपयोग करने के लिए डेवलपर पर निर्भर है।

यह वास्तव में Accept-Languageहेडर के समान है । एक ब्राउज़र एक वेबसाइट का अनुरोध कर सकता है कृपया मुझे इस वेबसाइट का एक रूसी संस्करण दिखाएं, जो URL में सम्मिलित / बर्बाद / समान हो।


30
वाह, यह एक भयानक रखरखाव दुःस्वप्न की तरह लगता है। यदि आप एक ही पृष्ठ का एक अलग प्रतिनिधित्व लौटना चाहते हैं, तो आपको Acceptहेडर को एक अलग सामग्री-प्रकार प्रदान करना चाहिए । इसके लिए एक कस्टम हेडर का उपयोग करना गलत तरीके से जाने जैसा लगता है।
गिली

10

कुछ फ्रेमवर्क इस हेडर का उपयोग xhr रिक्वेस्ट का पता लगाने के लिए कर रहे हैं। जैसे कि ग्रिल्स स्प्रिंग सिक्योरिटी इस हेडर का उपयोग xhr रिक्वेस्ट को पहचानने के लिए करती है और प्रतिक्रिया के रूप में json रिस्पांस या html रिस्पांस देती है।

अधिकांश अजाक्स पुस्तकालयों (v2.1 के रूप में प्रोटोटाइप, JQuery और Dojo) में एक एक्स-रिक्वेस्ट-विथ हेडर शामिल है जो यह दर्शाता है कि अनुरोध एक नियमित हाइपर बटन या फॉर्म सबमिट बटन पर क्लिक करके ट्रिगर किए जाने के बजाय XMLHttpRequest द्वारा किया गया था।

स्रोत: http://grails-plugins.github.io/grails-spring-security-core/guide/helperClasses.html

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.