Jako początkujący na ciasteczka, CSRF i Django (używając 1.4), z tego co mogę zrobić z tym jak to działa, proszę mnie poprawić, gdzie udać ...Czy tak działa ochrona CSRF Django?
Ponizsze odnosi gdzie django.middleware. csrf.CsrfViewMiddleware jest zawarty w krotce MIDDLEWARE_CLASSES.
Jeśli formularz POST zawiera znacznik csrf_token
, a dany widok przechodzi do szablonu RequestContext
, żądanie strony oznacza, że Django zawiera ukryte pole formularza zawierające ciąg alfanumeryczny. Django zwraca również do przeglądarki plik cookie o nazwie ustawionej na csrftoken
i wartości ustawionej na ten sam ciąg alfanumeryczny.
Po otrzymaniu zgłoszenia formularza, Django sprawdza, czy alfanumeryczna wartość ciągu z pola ukrytego jest zgodna z plikiem cookie csrftoken otrzymanym z przeglądarki. Jeśli nie są zgodne, zostanie wydana odpowiedź 403.
Atak CSRF może przyjść w postaci złośliwej strony internetowej zawierającej element iframe. Element iframe zawiera formularz POST i trochę skryptów JavaScript. Atrybut formularza action
wskazuje na moją witrynę Django. Formularz jest przeznaczony do zrobienia czegoś nieprzyjemnego na mojej stronie, a JS przesyła formularz po załadowaniu elementu iframe.
Przeglądarka będzie zawierać plik cookie csrftoken
w nagłówku przesłania formularza. Jednak formularz nie zawierałby ukrytego pola z pasującym ciągiem alfanumerycznym, więc 403 jest zwracany i atak się nie powiódł. Jeśli element iframe JS próbował uzyskać dostęp do pliku cookie, aby utworzyć poprawne pole formularza hiddden, przeglądarka uniemożliwiłaby to działanie.
Czy to prawda?
Nie widzę niczego złego. Może inni będą, ale generalnie, dostaliście to. – Zashas