Zadanie akademickie na formularze Django. Prowadzący zarządał ścisłej walidacji danych przychodzących w POST. No to ja chcę przetestować swoją walidację: Uruchamiam serwer deweloperski Django, wypełniam formularz w przeglądarce, otwieram zakładkę Network Narzędzi Deweloperskich Firefoxa, wybieram zapytanie POST związane z tym formularzem, i próbuję przesłać je ponownie, podmieniając kilka danych na nieprawidłowe (ale NIE TYKAM SIĘ csrfmiddlewaretoken
ani ciasteczka csrftoken
).
Serwer deweloperski Django odrzuca zapytanie, bo CSRF token missing or incorrect.
.
Próbuję przesłać poprawne zapytanie POST jeszcze raz, tym razem niczego nie zmieniając.
Znowu CSRF token missing or incorrect.
Jednocześnie wysłanie tego zapytania ponownie poprzez przeładowanie strony i przejście przez ostrzeżenie: To display this page, Firefox must send information that will repeat any action (such as a search or order confirmation) that was performed earlier.
działa bez zarzutu.
Nie rozumiem:
-
Czemu wysłanie czystego zapytania POST wywołuje błędy CSRF pomimo, że zawiera ono prawidłową wartość
csrfmiddlewaretoken
(sprawdziłem porównując ze źródłem strony) i poprawną wartość ciasteczkacsrftoken
(sprawdziłem porównując z wartością ustawioną w ostatniej odpowiedzi serwera)? Jeśli dobrze rozumiem dokumentację: https://docs.djangoproject.com/en/1.8/ref/csrf/ to prawidłowe ustawienie tych dwóch wartości powinno bez problemu przejść to zabezpieczenie i nie wywalać błędów. -
Czym różni się przeładowanie strony od ręcznego wysłania tego samego zapytania, że przeładowanie strony działa bez problemu, podczas gdy ręczne wysłanie zapytania nie?