2012-03-30 13 views
6

मैं csrf protcetion तंत्र की django में मेरी समझ को लिख रहा हूं। अगर यह दोषपूर्ण है तो कृपया मुझे सही करें।django छिपे हुए क्षेत्र में csrf को समझने और CSRFCookie

csrfViewMiddleware एक छिपा क्षेत्र में एक अद्वितीय स्ट्रिंग और यह भंडार एक रूप host.Since से भी इस फ़ॉर्म नकल उतार इस क्षेत्र के मूल्य के बारे में पता नहीं होगा एक दुर्भावनापूर्ण वेबसाइट होने वाले की 'csrfmiddlewaretoken' बनाता है, जिसे उसका उपयोग नहीं कर सकते हैं।

जब कोई कोई फॉर्म पोस्ट करने का प्रयास करता है, तो वेबसाइट 'csrfmiddlewaretoken' फ़ील्ड और उसके मान की जांच करती है। अगर यह गलत है या सेट नहीं है, तो एक सीएसआरएफ प्रयास का पता चला है।

लेकिन फिर, CSRFCookie वास्तव में क्या है? The doc का कहना है कि अद्वितीय मान CSRFCookie में और hidden field में भी सेट किया गया है। यह वह जगह है जहां मैं उलझन में हूं। क्या कुकी को अद्वितीय स्ट्रिंग के साथ ब्राउजर में भेजा जाता है? मेरी इच्छा है कि कोई इसे थोड़ा स्पष्ट रूप से समझा सके।

धन्यवाद,

उत्तर

5

ठीक है, इसलिए यहाँ मेरी स्पष्टीकरण जाता है:

Django एक प्रमाणीकृत उपयोगकर्ता एक CSRF टोकन है कि एक कुकी में संग्रहीत किया जाता प्रदान करती है। इस कुकी में मूल्य हर बार जब उपयोगकर्ता एक अनुरोध करता है जिसे "असुरक्षित" (अर्थात् POST, PUT, DELETE) माना जाता है, यह सत्यापित करने के लिए कि उपयोगकर्ता दुर्भावनापूर्ण तृतीय-पक्ष नहीं है, अनुरोध कर रहा है।

CSRF टैग आप एक रूप में जगह वास्तव में कुकी से CSRF टोकन पकड़ लेता है और फिर एक पोस्ट चर के रूप में यह में गुजरता है जब आप एक फ़ॉर्म सबमिट करें।

उम्मीद है कि यह थोड़ा स्पष्ट बनाता है।

+0

तो केवल एक प्रमाणीकृत उपयोगकर्ता के ब्राउज़र को यह टोकन मिलता है और साइट पर आने वाले हर कोई नहीं। क्या यह सही है? – damon

+0

यह सुनिश्चित नहीं है कि Django इसे कैसे संभालता है - यह प्रमाणीकरण स्थिति के बावजूद सभी उपयोगकर्ताओं की रक्षा कर सकता है। असल में कोई भी क्रिया जिसमें आपके ऐप के कुछ पहलू को बदलने की क्षमता है, में सीएसआरएफ सुरक्षा होनी चाहिए। – Todd

1

मेरी वर्तमान समझ के साथ, मैं मान्य उत्तर से पूरी तरह संतुष्ट नहीं हूं।

तुम मेरी संस्करण here पा सकते हैं।

संक्षेप में, CSRFCookie "सुरक्षित" है, इस अर्थ में कि हमलावर यह एक ही मूल नीति के कारण उपयोग नहीं कर सकते। ब्राउज़र स्वचालित रूप से यह मान भेज देगा। अब, आपके फॉर्म को यह मान भी भेजना होगा (उदा। एक छिपे हुए क्षेत्र में)। इसका मतलब है कि आपके फॉर्म को यह मान पता होना चाहिए, और यह इसे कुकी से प्राप्त कर सकता है।

हमलावर कुकी से टोकन नहीं मिल सकता है, और इसलिए एक दुर्भावनापूर्ण कोड है कि टोकन शामिल बना नहीं कर सकते।

क्या महत्वपूर्ण है, अंत में, यह है कि उपयोगकर्ता एक CSRF टोकन भेज सकते हैं, और सर्वर यह सत्यापित कर सकते हैं। कुकी का उपयोग करना ऐसा करने का एक सुविधाजनक तरीका है, लेकिन इसे अलग-अलग कार्यान्वित किया जा सकता है (उदाहरण के लिए सर्वर प्रत्येक सत्र के लिए सीएसआरएफ टोकन सहेज सकता है, उदाहरण के लिए)।

मैं एक विशेषज्ञ नहीं हूँ, लेकिन यह कैसे मैं इसे समझते हैं। आशा करता हूँ की ये काम करेगा।

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