2012-04-20 8 views
11

मैं CSRF के बारे में सुनने किया गया है एक लंबे समय पहले, और बात मैं समय के सबसे अधिक सुनना है:सीएसआरएफ संरक्षण वास्तव में क्या है?

CSRF हमलों के खिलाफ की रक्षा के लिए महत्वपूर्ण है ताकि किसी को अपने आप आपके प्रपत्र सबमिट नहीं है (एक बॉट या कुछ का उपयोग करके)

अच्छा, यह 100% सत्य नहीं है, है ना?

मैं लगभग 3 वर्षों तक वेब स्क्रैपिंग कर रहा हूं, और यह अनुरोध करने के लिए बहुत सरल है, csrftokenmiddleware फ़ील्ड को पार्स करें और इसे अन्य क्षेत्रों के साथ पोस्ट करें।

तो, यह वास्तव में क्या है?

+0

@agf मैंने अभी यह प्रश्न पढ़ा है, और मुझे डुप्लिकेशंस नहीं दिख रहा है: (' –

+0

निश्चित रूप से। मैं अब जवाब पढ़ रहा हूं ...;) –

+2

आप" अज्ञात "पोस्ट का वर्णन करते हैं। यह उस पोस्ट को उपयोगकर्ता के क्रेडेंशियल्स में वास्तविक लॉग इन के साथ होने से बचाने के बारे में है। – Cheekysoft

उत्तर

8

हां, आप फॉर्म को स्क्रैप कर सकते हैं और सीएसआरएफ रोकथाम टोकन प्राप्त कर सकते हैं। लेकिन आप साइट को स्क्रैप किए बिना फ़ॉर्म सबमिट कर सकते हैं, और आप किसी और से टोकन प्राप्त नहीं कर सकते हैं और फिर फॉर्म सबमिट कर सकते हैं - यह एक सत्र से जुड़ा हुआ है। यही सीएसआरएफ सुरक्षा वास्तव में रोकता है, कोई व्यक्ति किसी फ़ॉर्म को सबमिट करने में किसी को धोखा दे रहा है।


CSRFs का एक और अधिक सामान्य विवरण, मूल रूप से Django's comments framework and CSRF के जवाब में पोस्ट:

एक CSRF जहां अनुमति के बिना किसी को एक संसाधन के गुर कोई उस तक पहुंचने में में अनुमति है, जो उपयोग करने के लिए हमला है।

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

तो सीएसआरएफ सुरक्षा के बिना कोई, सैद्धांतिक रूप से, उपयोगकर्ता द्वारा एक टिप्पणी सबमिट करने में लॉग इन कर सकता है जिसे उन्होंने वास्तव में नहीं लिखा था।

सीएसआरएफ सुरक्षा के साथ, Django पता लगाएगा कि यह आपकी साइट पर वास्तविक रूप से सबमिट वास्तविक डेटा नहीं था, और इसे अस्वीकार कर देगा।

1

यह एक अलग प्रकार के परिदृश्य के लिए एक सुरक्षा है। कभी-कभी हमलावर या तो जावास्क्रिप्ट को इंजेक्ट करने में सक्षम होता है, या तो iframes या img src-s आपके किसी पृष्ठ पर, किसी भी लॉग इन उपयोगकर्ता द्वारा एक्सेस किया जा सकता है। जब उपयोगकर्ता पृष्ठ तक पहुंचता है (आइए टिप्पणियों वाला एक पृष्ठ कहें, और एक टिप्पणी हमलावर पोस्टिंग द्वारा एक लिंक का अनुरोध करती है), यह अनुरोध लॉग इन उपयोगकर्ता के ब्राउज़र द्वारा पूरी तरह से अपनी कुकीज़ के साथ किया जा रहा है। सीएसआरएफ मूल रूप से इस तरह के ट्रिगर सबमिट (सरल क्लाइंट-साइड सबमिशन) की रक्षा करता है। बेशक, कोई भी हमलावर पृष्ठ का अनुरोध कर सकता है, इसे टोकन के लिए पार्स कर सकता है और टोकन के साथ अनुरोध बना सकता है, लेकिन लॉग इन उपयोगकर्ता के बगल में ऐसा नहीं कर सकता है।

16

एक सौदे प्रस्तुत करने के लिए निम्नलिखित फार्म के साथ banking.example.com पर एक ई-बैंकिंग वेब अनुप्रयोग कल्पना कीजिए:

<form action="/transaction" method="post"> 
    <input type="text" name="beneficiary"/> 
    <input type="text" name="amount"/> 
    <input type="submit" value="Pay"/> 
</form> 

एक हमलावर अब तक एक वेबसाइट hacker.net पर साथ सेट कर सकते हैं निम्नलिखित:

<form action="https://banking.example.com/transaction" method="post" style="visibility:hidden"> 
    <input type="text" name="beneficiary" value="John Doe, Account No. 34-236326-1"/> 
    <input type="text" name="amount" value="1000000"/> 
    <input type="submit" value="Pay"/> 
</form> 
<script> 
    document.forms[0].submit(); 
</script> 

हमलावर तो जाकर hacker.net में पीड़ितों चाल हैं, जो पीड़ितों के ब्राउज़र का कारण है, ई-बैंकिंग आवेदन करने के लिए एक पोस्ट अनुरोध भेजने के लिए हैकर के लिए एक बड़े लेनदेन करने होंगे। यह काम करता है क्योंकि पीड़ित का ब्राउज़र खुशी से ई-बैंकिंग एप्लिकेशन के जाली पोस्ट अनुरोध के साथ सत्र कुकी भेजता है। यदि फॉर्म सीएसआरएफ टोकन द्वारा संरक्षित किया गया होता, तो हमलावर पीड़ित के ब्राउज़र को वैध POST अनुरोध भेजने का कारण नहीं बना सकता था और इस प्रकार हमला संभव नहीं होगा।

हमले के इस प्रकार के एक क्रॉस-साइट अनुरोध जालसाजी (CSRF) हमले कहा जाता है।

संयोग से, CSRF हमलों भी कारण है कि लोग कभी अन्य वेबसाइटों पर जाकर जबकि एक ई-बैंकिंग या अन्य महत्वपूर्ण वेब अनुप्रयोग में लॉग इन किया जा रहा है कभी नहीं की सलाह दे रहे हैं।

CSRF टोकन की रक्षा नहीं करते एक वेब फार्म स्वचालित रूप से खुद को नियमित रूप से अधिकृत उपयोगकर्ताओं द्वारा प्रस्तुत की जा रही है। उस से बचाने के लिए, आप CAPTCHA का उपयोग करेंगे।

+0

आपको कैसे लगता है कि यह सर्वर पक्ष पर रेफरर को मान्य करने से अलग है? सीएसआरएफ कुकीज़ का समर्थन किए बिना, लेकिन केवल यह सत्यापन कर रहा है, मैं अभी भी हमले की पहचान कर सकता हूं। – Ethan

+0

ठीक है, मुझे पता चला कि रेफरर का उपयोग क्यों नहीं किया जाता है। यह कई मामलों में अवरुद्ध है क्योंकि इसे कभी-कभी संवेदनशील जानकारी रखने के लिए माना जाता है। कॉर्पोरेट और उनके प्रॉक्सी आमतौर पर ऐसा करते हैं। हालांकि, अगर HTTPS का उपयोग किया जाता है, तो अधिक संभावना है कि इसे अवरुद्ध नहीं किया जाएगा। और, यह भी उल्लेख किया गया है कि रेफरर को धोखा दिया जा सकता है। – Ethan

+0

सीओआरएस के बारे में एक दोस्त को लेते समय मैं फिर से इस सवाल में आया। 'document.forms [0] .submit(); वही मूल नीति के कारण वैसे भी काम नहीं करेगा, है ना? –

0

आप नहीं अनुरोध करते हैं, csrftokenmiddleware क्षेत्र पार्स और अन्य क्षेत्रों के साथ-साथ इसे पोस्ट करने

में सक्षम हो जाएगा।

क्योंकि एक अलग डोमेन पर जेएस आपके डोमेन से properly कॉन्फ़िगर किए जाने पर अनुरोधों को बनाने के लिए आपके डोमेन से डेटा लाने और उपयोग करने में सक्षम नहीं होगा।

CORS बारे में पढ़ें।

संबंधित मुद्दे