सीएसआरएफ सुरक्षा कोर कोर हेडर बनाम सीएसआरएफ टोकन के साथ


103

यह सवाल केवल क्रॉस साइट रिक्वेस्ट फॉरगिरी हमलों से बचाव के बारे में है।

यह विशेष रूप से इसके बारे में है: क्या ओरिजिन हेडर (कोर्स) के माध्यम से सुरक्षा सीएसआरएफ टोकन के माध्यम से सुरक्षा के रूप में अच्छी है?

उदाहरण:

  • ऐलिस अपने ब्राउज़र के साथ " https://example.com " में (एक कुकी का उपयोग करके) लॉग इन है । मुझे लगता है, कि वह एक आधुनिक ब्राउज़र का उपयोग करती है।
  • ऐलिस " https://evil.com " पर जाता है, और bad.com का क्लाइंट साइड कोड " https://example.com " (क्लासिक CSRF परिदृश्य) के लिए किसी प्रकार का अनुरोध करता है ।

इसलिए:

  • यदि हम ओरिजिन हेडर (सर्वर-साइड), और कोई सीएसआरएफ टोकन चेक नहीं करते हैं, तो हमारे पास सीएसआरएफ सुरक्षा छेद है।
  • यदि हम CSRF टोकन की जांच करते हैं, तो हम सुरक्षित हैं (लेकिन यह थोड़ा कठिन है)।
  • यदि हम ओरिजिन हेडर की जांच करते हैं, तो bad.com के क्लाइंट साइड कोड से अनुरोध को केवल CSRF टोकन का उपयोग करते समय अवरुद्ध किया जाना चाहिए - इसके अलावा, अगर यह ओरिजिनल हेडर सेट करने के लिए bad.com के कोड के लिए किसी तरह संभव है।

मुझे पता है, कि यह एक्सएचआर ( क्रॉस-ऑरिजनल रिसोर्स शेयरिंग के लिए उदाहरण सुरक्षा देखें) के साथ संभव नहीं होना चाहिए , कम से कम नहीं, अगर हम सभी आधुनिक ब्राउज़रों में डब्ल्यू 3 सी कल्पना को सही तरीके से लागू करने का भरोसा करते हैं (क्या हम कर सकते हैं?)

लेकिन अन्य प्रकार के अनुरोधों के बारे में क्या है - उदाहरण के लिए फॉर्म सबमिट करें? एक स्क्रिप्ट लोड हो रहा है / img / ... टैग? या किसी अन्य तरीके से कोई पृष्ठ (कानूनी रूप से) अनुरोध करने के लिए उपयोग कर सकता है? या शायद कुछ ज्ञात जेएस हैक?

नोट: मैं बात नहीं कर रहा हूँ

  • देशी अनुप्रयोग,
  • ब्राउज़ किए गए ब्राउज़र,
  • example.com के पृष्ठ में क्रॉस साइट स्क्रिप्टिंग बग्स,
  • ...

1
मेरा मानना ​​है कि कई हेडेक्स मूल हेडर को स्ट्रिप करते हैं।
thefourtheye

और फॉर्म सबमिट और इमजी / स्क्रिप्ट टैग के लिए, हमें सीएसपी पर भरोसा करना चाहिए, हालांकि पुराने ब्राउज़रों के बारे में निश्चित नहीं है।
thefourtheye

3
@thefourtheye: चूंकि कनेक्शन टीएलएस पर शुरू किया गया है, इसलिए उपयोगकर्ता के पास CSRF की तुलना में कहीं अधिक दबाव वाला मुद्दा है यदि एक प्रॉक्सी उसे / उसके बीच में काम कर सकता है।
पर्सिड्स

2
@thefourtheye, वे क्यों पट्टी करेंगे Origin? कि कोर सुरक्षा की उपेक्षा करेगा।
पॉल ड्रेपर

1
मुझे यह सवाल और इसके जवाब पसंद हैं क्योंकि वे कुछ विशिष्ट के बारे में हैं, लेकिन वे मुझे सीएसआरएफ और कोर के बीच के अंतर की भी याद दिलाते हैं। (मैं मानता हूं कि वे आसानी से भ्रमित करने वाली अवधारणाएं नहीं हैं ... लेकिन मैं अभी भी उन्हें भ्रमित करने का प्रबंधन करता हूं।)
लाल मटर

जवाबों:


41

पता है, कि एक्सएचआर के साथ यह संभव नहीं होना चाहिए (क्रॉस-ऑरिजनल रिसोर्स शेयरिंग के लिए उदाहरण सुरक्षा देखें), कम से कम नहीं, अगर हम सभी आधुनिक ब्राउज़रों में डब्ल्यू 3 सी कल्पना को सही तरीके से लागू करने का भरोसा करते हैं (क्या हम कर सकते हैं?)

दिन के अंत में आपको उपयोगकर्ता के डेटा को सुरक्षित रूप से संग्रहीत करने और सत्र के क्लाइंट-साइड की सुरक्षा के लिए क्लाइंट ब्राउज़र पर "विश्वास" करना होगा। यदि आप क्लाइंट ब्राउज़र पर भरोसा नहीं करते हैं, तो आपको स्थैतिक सामग्री के अलावा किसी अन्य चीज़ के लिए वेब का उपयोग करना बंद कर देना चाहिए। CSRF टोकन का उपयोग करने के साथ भी, आप क्लाइंट ब्राउज़र पर भरोसा कर रहे हैं कि वह समान उत्पत्ति नीति का सही ढंग से पालन करे ।

जबकि IE 5.5 / 6.0 में पिछले ब्राउजर की कमजोरियां थीं, जहां हमलावरों के लिए समान उत्पत्ति नीति को दरकिनार करना और हमलों को अंजाम देना संभव था, आप आमतौर पर इन के जल्द से जल्द खोजे जाने की उम्मीद कर सकते हैं और अधिकांश ब्राउजर अपने आप अपडेट हो जाते हैं , यह जोखिम ज्यादातर कम होगा।

लेकिन अन्य प्रकार के अनुरोधों के बारे में क्या है - उदाहरण के लिए फॉर्म सबमिट करें? एक स्क्रिप्ट लोड हो रहा है / img / ... टैग? या किसी अन्य तरीके से कोई पृष्ठ (कानूनी रूप से) अनुरोध करने के लिए उपयोग कर सकता है? या शायद कुछ ज्ञात जेएस हैक?

Originहैडर सामान्य रूप से केवल एक्सएचआर क्रॉस-डोमेन अनुरोध के लिए भेजा जाता है। छवि अनुरोधों में हेडर शामिल नहीं है।

नोट: मैं बात नहीं कर रहा हूँ

  • देशी अनुप्रयोग,

  • ब्राउज़ किए गए ब्राउज़र,

  • example.com के पृष्ठ में क्रॉस साइट स्क्रिप्टिंग बग्स,

मुझे यकीन नहीं है कि यह हेरफेर किए गए ब्राउज़रों के तहत आता है या नहीं, लेकिन फ्लैश के पुराने संस्करणों ने मनमाने हेडर सेट करने की अनुमति दी है जो एक हमलावर को refererएक हमले को अंजाम देने के लिए पीड़ित की मशीन से एक स्पूफ हेडर के साथ एक अनुरोध भेजने में सक्षम करेगा ।


फ़्लैश उदाहरण एक अच्छा है - और शायद अन्य प्लगइन्स में समान भेद्यता हो सकती है। मैं (दुर्भाग्य से) केवल ऐलिस को सीएसआरएफ से बचा सकता हूं, अगर वह एक आधुनिक ब्राउज़र आदि का उपयोग करती है, तो यह स्पष्ट है। लेकिन यह अनुचित नहीं है, कि एक सुरक्षा-जागरूक उपयोगकर्ता के रूप में, उसने 3 पार्टी प्लग इन स्थापित किया हो सकता है - खासकर जब वे बड़ी (भरोसेमंद) कंपनियों से हों। भले ही वे सुरक्षित प्लगइन्स लिख सकते हैं, मैं 100% आश्वस्त नहीं हूं, अगर वे भी सीएसआरएफ के बारे में सोचते हैं! इसलिए जब तक कि ब्राउज़र सैंडबॉक्स एसओपी का उल्लंघन करने से प्लगइन्स को प्रतिबंधित नहीं करता है (क्या वे शायद?), मैं सीएसआरएफ टोकन के साथ छड़ी करने की सलाह दूंगा।
क्रिस लेर्चर

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

27

वेब सामग्री मूल हेडर के साथ छेड़छाड़ नहीं कर सकती है। इसके अलावा, एक ही मूल नीति के तहत, एक मूल कस्टम हेडर को अन्य मूल में भी नहीं भेज सकता है। [1]

इस प्रकार, ओरिजिन हेडर की जांच करना सीएसआरएफ टोकन का उपयोग करते हुए हमलों को रोकने में उतना ही अच्छा है ।

इस पर भरोसा करने के साथ मुख्य चिंता यह है कि क्या यह सभी वैध अनुरोधों को काम करने देता है। पूछने वाले को इस मुद्दे के बारे में पता है, और इसने प्रमुख मामलों (केवल पुराने ब्राउज़र, HTTPS) को नियंत्रित करने के लिए सवाल नहीं खड़ा किया है।

ब्राउज़र विक्रेता इन नियमों का पालन करते हैं, लेकिन प्लगइन्स के बारे में क्या? वे नहीं कर सकते हैं, लेकिन सवाल "ब्राउज़रों को हेरफेर करता है।" ब्राउज़र में बग्स के बारे में क्या है जो एक हमलावर को ओरिजिन हेडर बनाने देता है? ऐसे बग्स हो सकते हैं जो CSRF टोकन को मूल रूप से लीक करने की अनुमति देते हैं, इसलिए यह तर्क देने के लिए अधिक काम करेगा कि एक दूसरे से बेहतर है।


5
मैंने अभी-अभी फ़ायरफ़ॉक्स 47 का परीक्षण किया है और यह क्रॉस-ऑरिजिनल फॉर्म पोस्ट (REST सेवाओं पर हमला करने का एक सामान्य तरीका जो XHR के लिए CORS को सक्षम नहीं करता है) के लिए एक ओरिजिनल हेडर नहीं भेजता है, इसलिए मुझे लगता है कि ओरिजिनल हेडर चेक नहीं है प्रभावी होगा यदि उपयोगकर्ता फ़ायरफ़ॉक्स का उपयोग कर रहा है।
एंडी

3
संदर्भ के लिए, फ़ायरफ़ॉक्स "ओरिजिन" हेडर नहीं भेजने का मुद्दा बगज़िला में ट्रैक किया गया है: Bugzilla.mozilla.org/show_bug.cgi?id=446344 आप इस मामले में "रेफ़र" हेडर की जांच करने के लिए वापस आ सकते हैं लेकिन मेरे अनुभव में कुछ फ़ायरफ़ॉक्स उपयोगकर्ता गोपनीयता की चिंताओं के कारण "रेफ़र" हेडर को अवरुद्ध करते हैं (हालांकि IMHO यह पथ और क्वेरी को स्ट्रिप करने के लिए पर्याप्त होगा)।
स्टीफेन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.