2012-03-30 18 views
5

Tôi có một tùy chỉnh xem logout .Tôi đã thêm trang trí như dưới đâytôi nên sử dụng @csrf_protect theo quan điểm logout django của tôi cùng với các middleware

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) 

Trong xác lập cá nhân nộp Tôi có các lớp trung gian sau

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

Vì CsrfViewMiddleware được bao gồm ở đây, tôi có thực sự cần @csrf_protect cho chế độ xem của tôi không? Nếu tôi sử dụng cả hai, sẽ có một số vấn đề/xung đột?

Là một sang một bên, khi tôi kiểm tra django source, tôi thấy rằng trang trí chỉ được áp dụng cho chế độ xem đăng nhập chứ không áp dụng cho bất kỳ đăng xuất nào, lượt xem login_then_logout.Tại sao vậy?

Bất kỳ sự trợ giúp nào chào đón nhất

Trả lời

5

Middleware cung cấp cho bạn bảo vệ chăn trên tất cả các chế độ xem - thêm trang trí thừa. Các tài liệu Django khuyên bạn nên sử dụng Middleware trên trang trí vì nó cung cấp sự bảo vệ tốt hơn.

Không nên sử dụng trang trí, vì nếu bạn quên để sử dụng, bạn sẽ có lỗ hổng bảo mật. Chiến lược 'thắt lưng và niềng răng' của việc sử dụng cả hai đều tốt, và sẽ phải chịu chi phí tối thiểu.

Trình trang trí không được sử dụng cho các chế độ xem mà bạn đã đề cập vì có ít hoặc không có nguy cơ bị phiên tấn công qua CSRF nếu sự kiện login_then_logout được kích hoạt và không có rủi ro bảo mật cho người dùng sau khi phiên có đã bị phá hủy.

Dường như bạn có rất nhiều câu hỏi liên quan đến CSRF - tôi có thể đề nghị bạn tạo xương trên Django's CSRF documentation và CSRF trong general?

+0

cảm ơn @Todd, là một newbie để django & web dev, tôi đang đấu tranh để hiểu các công nghệ .. Tôi đang phát triển thông qua mã nguồn django và thường bị nhầm lẫn – damon

+1

@damon, tôi sẽ không sử dụng nguồn dưới dạng hướng dẫn cho khuôn khổ. Tài liệu của Django nằm trong số những tài liệu hay nhất mà tôi từng sử dụng (nếu không * là * tốt nhất). Tôi chắc chắn sẽ đọc Hướng dẫn Django trên trang web và bổ sung nó với phần còn lại của tài liệu chính thức Django. – Todd

Các vấn đề liên quan