2014-04-05 14 views
5

EDYTOWANIE: Powinienem był to powiedzieć na początku, używam AngularJS w FronEnd i robię wszystkie żądania przez XHR. Zajmuję się tworzeniem aplikacji przy użyciu CSRF Token dla każdego żądania użytkownika.Laravel CSRF Token

Czy po każdym żądaniu muszę ponownie wygenerować numer Token?

Coś

Session::forget("_token") and Session::put("_token", RANDOM_SOMETHING) 

Albo czy to wystarczy, aby użyć tego samego, każdy użytkownik Session?

Czy są jakieś korzyści?

+0

Co używasz tokena dla? Zakładając, że używasz go do czegoś innego niż zapobieganie XSS, trudno powiedzieć, czy będzie on ** "dobry" ** wystarczający dla twojego scenariusza. – Sam

+0

@Sam token dla xss? – itachi

+0

Token CSRF @itachi Laravel służy do zapobiegania żądaniom między lokacjami (zazwyczaj XSS).Jest token zapisany w sesji witryny i wysyłany przy każdym przesłaniu formularza, więc formularz musi zostać przesłany ze strony internetowej z sesją, aby sesja była właściwa ... niż fałszowanie żądania za pomocą skryptów cross-site. – Sam

Odpowiedz

4

laravel powinien robić to dla ciebie, nie trzeba zarządzać tworzenie/usuwanie _token

<input type="hidden" name="_token" value="<?php echo csrf_token(); ?>"> 

zobacz sekcję 'CSRF ochrony' w docs tutaj: http://laravel.com/docs/security

+0

Im przy użyciu AngularJS w FronEnd, im wysyłania tokenu CSRF na każdym żądanie XHR, im nie obsługiwać go w zwykły sposób –

+1

Próbowałem używać Session :: token() i innych metod do pobierania tokena, ale Laravel nie renegerates token, moje pytanie brzmiało, JEŚLI NALEŻY REGENEROWAĆ token lub po prostu użyć tego samego na całej sesji –

2

Depends . Jeśli atakujący nie jest MITM, w tym sensie, że nie może podsłuchiwać ruchu między aplikacją internetową a serwerem API, wystarczy jeden token CSRF dla całej sesji.

Zakładając, że chronisz wrażliwe operacje również po stronie serwera (np. Zezwalaj na dostęp do zasobów tylko właścicielowi zasobu, np. "Usuń moje konto", itp.) Token zapewni, że przeglądarka wysyłająca żądanie jest legalna, uwierzytelniona przeglądarka użytkownika. O to wszystko powinno się martwić, tak myślę.

Z drugiej strony, jeśli osoba atakująca jest w stanie spojrzeć na niezabezpieczony ruch między aplikacją internetową i interfejsem API, może zdobyć token CSRF i identyfikator sesji i zrobić zło w przejrzysty sposób. W takim przypadku przyznanie, używanie, a następnie odrzucenie tokena dla każdego żądania (POST lub innego rodzaju, który wykonuje wrażliwą operację) tylko sprawia, że ​​ich praca jest nieco trudniejsza, ale wciąż jesteś skazany na zagładę.

Moje 2 centów ...

+0

Ta odpowiedź powinna być zaakceptowana przez PO, ponieważ jest to jedyna, która faktycznie próbuje odpowiedzieć na to pytanie. –

7

Z laravel 5 Korzystanie z szablonów ostrza, jest to dość łatwe.

Jeśli chcesz tylko wartość tokena CSRF, można wygenerować go na piśmie:

{{ csrf_token() }} 

który generuje wartość symboliczną tak:

7YC0Sxth7AYe4RFSjzaPf2ygLCecJhPbyXhz6vvF 

Jeżeli jesteś używając formularzy, możesz dodać następujący wiersz kodu w formularzu:

{{ csrf_field() }} 

która będzie generować html jak poniżej:

<input type="hidden" name="_token" value="7YC0Sxth7AYe4RFSjzaPf2ygLCecJhblahblah"> 
Powiązane problemy