2012-03-30 16 views
5

tengo una vista personalizada de cierre de sesión .I han añadido los decoradores, como a continuacióndebo usar en mi @csrf_protect Django vista cierre de sesión junto con el 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) 

En la configuración de mi archivo que tengo las siguientes clases de middleware

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

Dado que el CsrfViewMiddleware se incluye aquí, ¿realmente necesito @csrf_protect para mi vista? Si uso ambos, ¿habrá algún problema/conflicto?

Como nota aparte, cuando revisé el django source, encontré que los decoradores se aplican solo para la vista de inicio de sesión y no para ninguna de las vistas de cierre de sesión, login_then_logout. ¿Por qué?

Cualquier ayuda muy bienvenida

Respuesta

5

El Middleware le da cobija la protección en todas las vistas - añadiendo el decorador es redundante. Los documentos de Django recomiendan usar el Middleware sobre el decorador ya que proporciona una mejor protección. no se recomienda

El uso del decorador por sí mismo, ya que si se le olvida Para usarlo, usted tendrá un agujero de seguridad. La estrategia de 'cinturón y abrazaderas' de usar ambos está bien, y tendrá una sobrecarga mínima.

Los decoradores no se utilizan para los puntos de vista que usted ha mencionado ya que hay poco o ningún riesgo de una sesión de ser secuestrado por medio de CSRF si se desencadena un evento login_then_logout y no hay ningún riesgo de seguridad para un usuario una vez por sesión tiene sido destruido

Parece que tiene muchas preguntas con respecto a CSRF. ¿Le sugiero que se prepare en Django's CSRF documentation y CSRF en general?

+0

gracias @Todd, siendo un novato en django & web dev, estoy luchando por entender las tecnologías ... estoy navegando por el código fuente de django y a menudo me confundo – damon

+1

@damon, no usaría la fuente como un guía para el marco. Los documentos de Django están entre los mejores que he usado (si no * el * mejor). Definitivamente leería el Tutorial de Django en el sitio web y lo completaría con el resto de la documentación oficial de Django. – Todd

Cuestiones relacionadas