2011-01-18 9 views
10

Jak można chronić się przed atakami XSRF w Grails. Widzę, że formy wspierają pojęcie useToken, które (moim zdaniem powinno wystarczyć). Jednak żądanie remoteForm lub inne żądanie powiązane z AJAX nie obsługuje tej funkcji.Jak chronisz przed XSRF w Grails?

Czy istnieje również sposób na odwrócenie funkcjonalności useToken tak, aby był zawsze używany zamiast włączania dla każdego przypadku z osobna?

+0

Wiem, że [sprawdzenie nagłówka HTTP Referer to za mało] (http://www.secureworks.com/research/blog/research/21009/), ale jest to lepszy niż nic początek, szczególnie jeśli nie zezwalaj na puste strony odsyłające. Jest to raczej łatwe do dodania jako filtr. – OverZealous

Odpowiedz

2

Możesz spróbować spojrzeć na kod źródłowy znacznika <g:form>. Używa ona SynchronizerToken do utworzenia tokena i zapisania go w sesji. Na podstawie rozdzielczości this issue powinno być możliwe użycie tego samego tokena dla wszystkich formularzy na tej samej stronie. Nie próbowałem tego, ale teoretycznie wystarczy ręcznie utworzyć ukryte pole w formularzu i wygenerować token w tym polu.

0

Wprowadziliśmy ukrytą wartość do obiektu żądania w filtrze before i zaszyfrujemy wartość za pomocą określonego klucza. Następnie wprowadzamy tę wartość request.token do każdego formularza na stronie, a gdy otrzymamy POST mamy przed filtr, aby sprawdzić, czy to ukryte pole jest obecne, a jego wartość może zostać zdekodowana przez ten sam tajny klucz.

Jeśli ta ukryta wartość nie występuje lub jest nieaktualna - używamy znacznika czasu jako ładunku - dajemy klientowi status błędu.

Jest to alternatywny sposób na to, co zostało opisane powyżej i używamy tego, ponieważ nie używamy sesji na naszych stronach, aby ułatwić ładowanie salda.