2011-01-19 11 views
9

Jakie dokładnie są zagrożenia, na które narażam się, jeśli nie używam tokenów csrf w moich formularzach? Nie szukam prostych etykiet ani nazw ryzyk, ponieważ mogą one być mylące. Muszę zrozumieć, co dokładnie może zrobić osoba atakująca i tylko w jakich okolicznościach mogą to zrobić, zwykłym angielskim.Formularz bez tokena CSRF: jakie są zagrożenia

+8

Wygląda na to, że ktoś próbuje dowiedzieć się więcej o bezpieczeństwie aplikacji. – park

Odpowiedz

9

Luka w zabezpieczeniach CSRF polega na tym, że złośliwy użytkownik (lub witryna) może spowodować, że niczego nie podejrzewający użytkownik wykona akcję w witrynie, której nie chcieli.

Niektóre przykłady z rzeczywistego świata to np. Jeśli pozwoliłeś użytkownikowi usunąć konto przez GET zamiast POST, ktoś może zamieścić następujący komentarz na twojej stronie (zakładając, że strona ma jakiś sposób na umieszczanie komentarzy lub innych danych wejściowych, itp.)

Pomyślałem, że chciałbym dodać komentarz do twojej strony. Sprawdź ten fajny obraz!
< img src = 'http: //example.com/delete_my_account.php”/ >

I teraz za każdym razem w ładunku zalogowanego użytkownika, że ​​strona, jego konto zostanie usunięte, jeśli zostało to zrobione w ciągu. POST zamiast GET, ktoś mógłby stworzyć formularz i nakłonić użytkowników do jego przesłania, a taki sam wynik by się wydarzył, podczas gdy jeśli użyłeś tokenu CSRF, nie byłoby to możliwe

Innym przykładem może być strona zewnętrzna można utworzyć formularz, który POSTs do Twojej witryny, i wykonać niepożądane działania.Załóżmy więc, że Twoja witryna ma koszyk, który nie używa tokeny CSRF. Złośliwa strona może utworzyć formularz z bu tton z napisem "Kliknij tutaj, aby się zarejestrować", ale faktycznie zamawia 1000 sztuk ze swojej witryny. Jeśli zalogowany użytkownik z Twojej witryny odwiedzi tę złośliwą witrynę i kliknie przycisk, otrzyma niezłą niespodziankę w poczcie.

Oczywiście są inne przypadki, to tylko kilka przykładów. Wyszukiwarka Google powinna zawierać wiele artykułów i samouczków, z których wiele prawdopodobnie będzie miało kilka innych przykładów. Model Wikipedia page ma również kilka przykładów, które mogą Cię zainteresować.

Główną ideą przykładów jest to, że ktoś może nakłonić witrynę do wykonania działania tak, jakby pochodziła od użytkownika, gdy naprawdę użytkownik nie był świadomy, że tak się stało lub nie chciał, aby to się stało. Jeśli masz jakieś działania na swojej stronie, które są destrukcyjne (to znaczy mogą usuwać rzeczy z konta użytkownika, wylogować użytkownika itp.) Lub krytyczne (tzn. Zajmują się pieniędzmi), powinieneś prawdopodobnie używać tokenów CSRF. Jeśli twoja strona jest tylko albumem ze zdjęciami dla przyjaciół itp., Prawdopodobnie nie musisz martwić się o tokeny CSRF (choć zawsze dobrze jest ćwiczyć, gdy tworzysz stronę, która ich potrzebuje).

Jeśli nie dodasz tokena w celu upewnienia się, że zapytanie pochodziło z formularza, w którym twoja strona jest prezentowana celowo, naprawdę nie masz możliwości sprawdzenia, czy użytkownik zamierza wykonać to działanie.

Dlatego zawsze chcesz używać unikalnego tokena na każdym formularzu, który generujesz, że POST i sprawdzanie poprawności wszystkich żądań POSTed do Twojej witryny mają ważny token dla bieżącego użytkownika. Pamiętaj też, aby wygasić tokeny po pewnym czasie, aby nie trwały wiecznie.

1

Radzę przeczytać ten znakomity artykuł wyjaśniający, czym jest CSRF i jak najlepiej chronić się przed nim.

+0

samquo artykuł wyjaśnia, czy jestem głupi: $ Ma sekcję "Przykład Exploit" – Alfred

+1

@samquo Twoja witryna prawdopodobnie nie zostanie zaatakowana przez to. Ale na przykład, jeśli Gmail nie miał ochrony CSRF, gdy plik cookie jest ustawiony, mógł wysyłać e-maile za pomocą mojego konta. To wszystko jest naprawdę w tym artykule. Powinieneś to przeczytać? – Alfred

+0

@samquo Twoja witryna prawdopodobnie nie zostanie zaatakowana przez to. Ale na przykład, jeśli Gmail nie miał ochrony CSRF, gdy plik cookie jest ustawiony (jestem zalogowany), mógł wysłać e-maile za pomocą mojego konta. To wszystko jest naprawdę w tym artykule. Powinieneś to przeczytać? – Alfred

Powiązane problemy