2012-01-03 15 views
6

już widać pewne pytanie stąd (stackoverflow) i THIS postu, ale mam jeszcze kilka pytań ...Zapobieganie CSRF?

  1. Korzystanie z ukrytej wartości w postaci postu i sprawdzić, kiedy po dotrzeć do serwera.

    • Ukrytą wartość można łatwo skopiować i wysłać dokładnie tak, jak prawdziwa, "trudno zgadnąć" (jak md5) nie pomoże. (prawda?)
  2. Ustawienie pliku cookie po dotarciu do formularza i wysłanie wartości cookie jako ukrytej wartości.

    • Możesz łatwo zmienić wartość cookie lub wysłać niestandardowy plik cookie dokładnie taki sam, jak prawdziwy, używając tej samej prawdziwej ukrytej wartości. (prawda?)
  3. Przy użyciu "limitu czasu" wartości POST nie mogą osiągnąć zbyt późno.

    • Tak więc, jeśli jesteś wolny, nie powiedzie się, gdy spróbujesz ustawić wszystko z ukrytą wartością. Jeśli będziesz szybki, zadziała. (Prawda?)

Chcę być chronione o CSRF ... ale jak dokładnie to zrobić?

+1

StackOverflow wykorzystuje przecenę - użyj tego podczas publikowania zamiast HTML. – Oded

+0

@Dziękuję, dziękuję. Zobaczę, jak to edytujesz i poznasz. – PedroGabriel

+0

Zobacz http://stackoverflow.com/questions/14667189/simple-example-for-why-same-origin-policy- jest przeznaczone na bardziej ogólne pytanie dotyczące CSRF. –

Odpowiedz

6

Najprostszym sposobem znalazłem się uniknąć problemów CSRF jest:

  1. Po stronie serwera, należy przypisać cookie do klienta z losową (unguessable) token

  2. Place ukrytym polem na postać z tą wartością ciasteczka

  3. Upon formie przedstawienia, zapewnienia ukrytą wartość pola jest równa wartości ciasteczek (po stronie serwera rzeczy)

+0

Jeśli wyślę "niestandardowy" plik cookie (np. Przy użyciu cURL) i wartość dokładnie tak, jak wartość cookie (niestandardowy plik cookie ma wartość "a", a wartość ukryta również "a") to zadziała (jak sądzę), wyślij formularz wartości jako rzeczywiste. – PedroGabriel

+2

To zadziała, ale CSRF nie ma przeszkodzić ludziom w wysyłaniu formularzy razem, tylko po to, aby uniemożliwić ludziom tworzenie formularzy jako innych (np. Ktoś z loggią w autoryzowanym stanie). Cały cel losowego tokena polega na tym, że użytkownik B (haker) nie zna tokenu użytkownika A, a zatem nie może przekierować żądania jako takiego. – Matthew

0

Jeśli się następujące zmiany to myślę, że jesteś bezpieczny

  • bez aktualizacji danych powinno być dozwolone przez GET (lub lepszego POST również) (ponieważ oba mogą być używane za pomocą formularzy HTML)
  • wyłącza CORS na swoim serwerze (lub przynajmniej na krytycznych punktach końcowych i/lub wprowadza zmiany w danych)
  • zezwala na interfejsy API JSON-only (np. akceptuj tylko dane wejściowe za pośrednictwem JSON przynajmniej na krytycznych punktach końcowych)

Aby dodać do powyższego: Nie używaj metod zastępowania i nie obsługuj starych przeglądarek.

+0

Właśnie odpowiedziałeś na pytanie z 2012 roku, a twoja odpowiedź nie jest nawet związana z CSRF ... – PedroGabriel

+0

plz przeczytać pytanie "zapobieganie CSRF?" i to jest to, co odpowiedziałem. – RTSid