Wstawia na stronę to, co jest w zasadzie cyfrową sygnaturą, stanowiąc weryfikację, że żądania przychodzące na serwer aplikacji są w rzeczywistości właściwie zalogowanymi użytkownikami. Pomaga to zapobiec skryptom cross-site (skrypt na zupełnie niezwiązanej stronie zwalniania żądań, aby powiedzieć, GMail, gdy jesteś zalogowany do Gmaila w innej karcie).
Domyślam się, że sama csrf_meta_tag
nie uniemożliwia niepowiązanej stronie odpalania żądań do Gmaila (lub jakiejkolwiek innej usługi, która jest celem ataku), ale "podpis cyfrowy" w csrf_meta_tag
jest używany do weryfikacji ważności wspomnianych żądań. Nieprawidłowe żądania (np. Próby cross-site scripting) nie powinny zostać zatwierdzone i dlatego są odrzucane.
powiedzieć to w inny sposób, z punktu widzenia atakującego widzenia:
Przed csrf_meta_tags
istniał (nie są one wyłącznie w Rails za pomocą wszelkich środków), udane cross-site scripting dozwolone szkodliwą witrynę do przekazywania danych do aplikacji internetowej w sposób, który sprawia, że żądanie wygląda tak, jakby było robione w imieniu użytkownika. Załóżmy, że jesteś administratorem usługi internetowej i na jednej karcie przeglądarki jesteś zalogowany w panelu administracyjnym dla tej usługi. Jeśli złośliwa witryna została otwarta na innej karcie, która atakowała twoją usługę w celu ataku, złośliwa strona może być w stanie uruchomić skrypty, które wysyłają żądania administracyjne, takie jak wysypywanie listy użytkowników z bazy danych, kradzież innych poufnych danych lub potencjalnie szkodzenie, uszkadzanie, lub niszczenie danych zawartych w usłudze, wszystkie podczas wyświetlania (z punktu widzenia serwera), aby były prawidłowymi żądaniami od samego administratora. csrf_meta_tag
to sposób na podpisywanie żądań i pomaganie udaremnić takie próby.
Istnieje dużo bardziej szczegółowe wyjaśnienie: available here.
Byłoby również pouczające, aby zrobić "źródło widoku" na jednej ze stron generowanych przez Railsy, a zobaczysz, jak wygląda znacznik CSRF.
Pozwól mi google, że dla ciebie http://stackoverflow.com/questions/941594/understand-rails-authenticity-token –
@MikhailNikalyukin Dzięki (I myśleć). To wyjaśnia CSRF, który znałem już na podstawach, ale nie wyjaśnia, w jaki sposób * meta tagi * (w przeciwieństwie do ukrytych pól formularzy) mogą temu zapobiec. Czy znasz odpowiedź na to pytanie? – Nick