Jaki jest najlepszy sposób, aby zapobiec atakowi XSRF dla aplikacji GAE? Wyobraź sobie następujące:Jak najlepiej zapobiegać atakom CSRF w aplikacji GAE?
- Każdy może zobaczyć obiekt publiczny użytkownika, a identyfikator db.Model jest używany w żądaniu do ustalenia, który obiekt ma być wyświetlany. Złośliwi użytkownicy mają teraz identyfikator.
- Złośliwy użytkownik tworzy własny obiekt i sprawdza formularz usunięcia. Teraz wiedzą, jak usunąć obiekt o określonym identyfikatorze.
- Złośliwy użytkownik dostaje niewinnego użytkownika, który przesyła żądanie usunięcia obiektu tego użytkownika.
Co mogę zrobić, aby zapobieC# 3? Zwróć uwagę, że kiedy mówię ID, używam rzeczywistej części ID klucza. Jedną z moich pomysłów było użycie pełnej wartości klucza w żądaniach usunięcia, ale czy to uniemożliwiłoby złośliwemu użytkownikowi zrozumienie tego? O ile mi wiadomo, klucz jest kombinacją typu klasy modelu, identyfikatora aplikacji i identyfikatora wystąpienia obiektu, aby mogli prawdopodobnie wyprowadzić klucz z identyfikatora, jeśli chcieli.
Jakieś inne pomysły? Jeff napisał a post about this i zasugerował kilka metod - ukrytą wartość formularza, która zmienia się przy każdym żądaniu, oraz wartość cookie zapisaną przez js do formularza. Nie chcę wykluczać użytkowników nieobsługujących javascriptu, więc rozwiązanie ciasteczek nie jest dobre - w przypadku ukrytej wartości formularza musiałbym pisać zapis datastore na każdym żądaniu wyświetlającym obiekt usunięcia - nie jest to idealna sytuacja dla skalowalnego aplikacja!
Jakieś inne pomysły?
Podobają mi się również podejście Makbirda, ale podoba mi się, że zapewnia to rozsądne bezpieczeństwo bez przechowywania po stronie serwera. –