2017-05-20 4 views
1

Ich möchte Seitenumbruch in einem Suchformular mit CSRF Schutz aktivieren, so dass ich den csrfmiddlewaretokenGET Parameter zum Link zur vorherigen/nächsten Seite hinzufügen muss.Wie CSRF Schutz Arbeit mit Seitenumbruch bekommen?

Die URL sieht wie folgt aus:

localhost:8000/myapp/search/?csrfmiddlewaretoken=JHgf7Cs6WgX29oOsLEpkW1w91ROVTpxXtNAgU1kSA3sDW1aUUOcXmBnxufahqfIS&q=foobar 

Hier ist, was ich getan habe:

search.html

<form method="get" action=""> 
    {% csrf_token %} 
    {{ form|crispy }} 

    <button type="submit" class="btn btn-primary btn-block"> 
     {% trans "Search" %} 
    </button> 
</form> 

...... 

{% include 'pagination.html' %} 

pagination.html

Was soll ich ersetzen mit um das CSRF-Token auf der nächsten Seite übergeben?

Antwort

1

Sie sollten keine CSRF Authentication für eine GET Anfrage benötigen. Wie in dieser link of the official django documentation erläutert:

die erste Verteidigungslinie gegen Angriffe ist, dass CSRFGET Anfragen zu gewährleisten (und andere ‚sichere‘ Methoden, wie durch RFC 7231#section-4.2.1 definiert sind) frei von Nebenwirkungen sind. Anfragen über "unsichere" Methoden, wie POST, PUT und DELETE, können dann geschützt werden, indem die folgenden Schritte ausgeführt werden.

Furthemore, in Django-Version 1.11 hat die CSRF_USE_SESSIONS hinzugefügt, die Sie wie folgt vor (taken from the documentation) verwenden können:

  1. die CSRF Token in Ihrem HTML-Include ({% csrf_token %})
  2. lesen das Token aus dem DOM mit JavaScript:

    {% csrf_token %} 
    <script type="text/javascript"> 
    // using jQuery 
    var csrftoken = jQuery("[name=csrfmiddlewaretoken]").val(); 
    </script> 
    

und das ermöglicht Ihnen, das CSRF-Token über Ihre Sitzung zu haben, ohne es mit der URL zu übergeben.

Viel Glück :)