2012-03-30 17 views
5

मैं एक कस्टम लॉगआउट दृश्य मैं की तरहमैं मिडलवेयर

from django.views.decorators.cache import never_cache 
from django.views.decorators.csrf import csrf_protect 
from django.views.decorators.http import require_POST 
from django.contrib.auth.views import logout_then_login 

@csrf_protect 
@require_POST 
@never_cache 
def logout(request): 
    nxt=request.POST.get('next') 
    print 'next=',nxt 
    return logout_then_login(request, nxt) 

अपनी सेटिंग्स में दाखिल नीचे मैं निम्नलिखित मिडलवेयर श्रेणियां होती हैं सज्जाकार जोड़ लिया है है के साथ मेरी Django लॉगआउट ध्यान में रखते हुए @csrf_protect का उपयोग करना चाहिए

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware', 
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
) 

चूंकि CsrfViewMiddleware यहां शामिल है, क्या मुझे वास्तव में मेरे दृश्य के लिए @csrf_protect की आवश्यकता है? यदि मैं दोनों का उपयोग करता हूं, तो क्या कुछ समस्या/संघर्ष होगा?

एक तरफ, जब मैंने django source की जांच की, तो मैंने पाया कि सजावटी केवल लॉगिन दृश्य के लिए लागू होते हैं, न कि लॉगआउट के लिए, login_then_logout विचारों के लिए। वह क्यों है?

किसी भी बहुत स्वागत

उत्तर

5

मिडिलवेयर आप सभी दृश्यों पर सुरक्षा कंबल देता मदद - डेकोरेटर जोड़ने अनावश्यक है। Django दस्तावेज़ सजावट पर मिडलवेयर का उपयोग करने की सलाह देते हैं क्योंकि यह बेहतर सुरक्षा प्रदान करता है।

स्वयं सजावट का उपयोग करने की अनुशंसा नहीं की जाती है, क्योंकि यदि आप इसका उपयोग करने के लिए भूल जाते हैं, तो आपके पास सुरक्षा छेद होगा। 'बेल्ट और ब्रेसेस' दोनों का उपयोग करने की रणनीति ठीक है, और न्यूनतम ओवरहेड लगेगी।

सज्जाकार विचारों आप एक सत्र का कोई खतरा नहीं CSRF के माध्यम से अपहरण कर लिया जा रहा है के लिए कुछ नहीं है, क्योंकि अगर एक login_then_logout घटना शुरू हो रहा है उल्लेख के लिए इस्तेमाल नहीं कर रहे हैं और वहाँ एक बार एक सत्र है एक उपयोगकर्ता के लिए कोई सुरक्षा खतरा नहीं है नष्ट कर दिया गया

आपको सीएसआरएफ के संबंध में बहुत सारे प्रश्न हैं - क्या मुझे सुझाव है कि आप Django's CSRF documentation और general में सीएसआरएफ पर हड्डी लेंगे?

+0

धन्यवाद @ टोड, डीजेंगो और वेब देव के लिए नौसिखिया होने के नाते, मैं प्रौद्योगिकियों को समझने के लिए संघर्ष कर रहा हूं..मैं डीजेंगो स्रोत कोड के माध्यम से बह रहा हूं और अक्सर – damon

+1

@damon उलझन में आता हूं, मैं स्रोत का उपयोग नहीं करता ढांचे के लिए गाइड। Django के दस्तावेज़ मैंने कभी भी सबसे अच्छे उपयोग किए हैं (यदि नहीं * * सर्वश्रेष्ठ)। मैं निश्चित रूप से वेबसाइट पर Django ट्यूटोरियल पढ़ता हूं और बाकी आधिकारिक Django दस्तावेज़ीकरण के साथ इसे पूरक करता हूं। – Todd

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