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?