2012-07-23 10 views
7

कुकीज़ पर अभी शुरुआत होने के नाते, CSRF और Django (1.4 का प्रयोग करके), मैं क्या बाहर कर सकते हैं से यह कैसे काम करता है, मुझे सही करें जहाँ मैं गलत हो ...क्या यह Django की सीएसआरएफ सुरक्षा कैसे काम करता है?

निम्नलिखित जहां django.middleware लागू होता है। csrf.CsrfViewMiddleware MIDDLEWARE_CLASSES tuple में शामिल है।

जहां एक पोस्ट फॉर्म में csrf_token टैग शामिल है, और संबंधित दृश्य RequestContext टेम्पलेट में पास करता है, पृष्ठ का अनुरोध करने का मतलब है कि Django में एक छिपी हुई फ़ील्ड फ़ील्ड शामिल है जिसमें अल्फान्यूमेरिक स्ट्रिंग है। Django ब्राउज़र पर एक कुकी को नाम के साथ csrftoken पर सेट करता है और वैल्यू उसी अल्फान्यूमेरिक स्ट्रिंग पर सेट होता है।

फॉर्म सबमिशन प्राप्त करते समय, Django जांचता है कि छिपे हुए फॉर्म फ़ील्ड मैचों और ब्राउज़र से प्राप्त csrftoken कुकी से अल्फान्यूमेरिक स्ट्रिंग मान। यदि वे 403 प्रतिक्रिया से मेल नहीं खाते हैं तो जारी किया जाता है।

एक सीएसआरएफ हमला एक दुर्भावनापूर्ण वेबसाइट के रूप में आ सकता है जिसमें एक आईफ्रेम शामिल है। आईफ्रेम में एक पोस्ट फॉर्म और कुछ जावास्क्रिप्ट शामिल है। मेरे Django साइट पर फॉर्म action विशेषता बिंदु। फ़ॉर्म को मेरी साइट पर कुछ गंदा करने के लिए डिज़ाइन किया गया है, और जेएस आईफ़्रेम लोड होने पर फ़ॉर्म सबमिट करता है।

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

क्या यह सही है?

+1

मुझे कुछ भी गलत नहीं दिख रहा है। शायद दूसरों को, लेकिन सामान्य रूप से, आप इसे मिला। – Zashas

उत्तर

0

मैं कहूंगा कि आप सही कर रहे हैं। आपको here मेरा स्वयं का फॉर्मूलेशन मिलेगा।

संक्षेप में:

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

मुझे लगता है कि आप जो चाहते हैं वह आधिकारिक Django दस्तावेज़ीकरण में वर्णित है। https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#how-it-works

लिंक से ऊपर जब मैंने कोशिश की टूट गया था, लेकिन संस्करण 1.7 के लिए यह काम करता है: https://docs.djangoproject.com/en/1.7/ref/contrib/csrf/

+1

लिंक के लिए धन्यवाद। यह कहता है "यह सुनिश्चित करता है कि आपकी वेबसाइट से उत्पन्न होने वाले केवल फ़ॉर्म को डेटा पोस्ट करने के लिए उपयोग किया जा सकता है।" लेकिन यह नहीं कहता _how_ यह सुनिश्चित करता है कि। –

+0

मैंने हाल ही में Django कोड बेस के उस हिस्से को नहीं देखा है, लेकिन अगर मैं कहीं और से जानता हूं, तो यह बेस यूआरएल का पता लगाने के लिए UrlParse का उपयोग करता है और यदि बेस यूआरएल मेजबान यूआरएल से मेल नहीं खाता है, तो यह एक त्रुटि लौटाएगा या चुपचाप असफल हो जाएगा। (जब आप किसी अन्य योजना के लिए प्रतिक्रिया वापस करने का प्रयास करते हैं तो यह चुपचाप विफल रहता है जैसे foo: // – fundamol

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