2012-03-29 3 views
2

beim Lesen djangobook chapter stieß ich auf den Abschnitt, der eine csrf-Exploit erwähnt, wo ein Abmeldelink in eine versteckte bösartige Website gesetzt wurde.django Abmeldung mit einem Link oder Formular zu csrf Exploit zu verhindern

<a href="{% url my_logout %}" > Logout </a> 

wo die my_logout URL auf django.contrib.auth.views.logout_then_login

urlpatterns=patterns('django.contrib.auth.views', 
url(r'^logout/$', 'logout_then_login', {}, name = 'my_logout'), 
) 

Jetzt:

In einem Web-App Ich habe django verwenden, hatte ich einen ähnlichen Logout-Link

base.html verwendet Nachdem ich über csrf attack gelesen habe, befürchte ich, dass eine bösartige Seite mir auch Probleme bereiten kann. Also würde ich gerne ein Formular verwenden, um die Abmeldung durchzuführen.

Ich dachte, ich mag dieses

base.html tun konnte:

... 

    <form method="post" action=".">{% csrf_token %} 
     <input type="hidden" name="next" value="{{next}}" /> 
     <input type="hidden" name="confirm" value="true" /> 
     <input type="submit" value="Logout" /> 
    </form> 
... 

Nun, wie soll ich schreiben die Ansicht dieses Formular zur Bearbeitung Wenn ich die verborgenen Variablen zu verarbeiten (confirm zu? überprüfen, ob Abmeldung durchgeführt werden sollte und next, um zur vorherigen Ansicht zu gehen), kann ich immer noch die django.contrib.auth.views.logout_then_login Methode verwenden?

Kann mir bitte jemand sagen, ob ich das richtig mache?

Dank im Voraus

Antwort

3

Sie es sich auch wie

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

@csrf_protect 
@require_POST 
@never_cache 
def safer_logout(request): 
    # 'confirm' is useless here, POST implies 'do it' 
    return logout_then_login(request, request.POST.get('next')) 

wickeln könnte, sollten mit SESSION_COOKIE_HTTPONLY

+0

@ClaudeVedovini fühlte sich schnell jemand tippte, wenn ich es bearbeite wurde, ha = p – okm

+0

I würde fast die gleiche Antwort posten :) Jedenfalls würde ich hinzufügen, dass ich nicht denke, dass das wirklich nützlich ist. CSRF-Exploits werden verwendet, um Benutzer dazu zu bringen, Aktionen in Anwendungen auszuführen, in denen sie angemeldet sind. Es ist nicht wirklich wichtig, sie zum Abmelden zu zwingen. –

+0

@ClaudeVedovini Ja, aber manchmal ist es schädlich, wenn der Angreifer beabsichtigt, Sie für eine Weile abzumelden oder auf Ihre neue Login-Prozedur zu warten – okm