2014-04-05 37 views
5

EDIT: Avrei dovuto dirlo all'inizio, sto utilizzando AngularJS in FronEnd e sto facendo tutte le richieste tramite XHR. Sto sviluppando un'applicazione utilizzando CSRF Token per ogni richiesta utente.Token CSRF Laravel

Devo rigenerare il Token dopo ogni richiesta?

Qualcosa di simile

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

O è sufficiente utilizzare lo stesso ogni utente Session?

C'è qualche vantaggio?

+0

Che cosa stai usando il token per? Supponendo che lo stai usando per qualcosa di diverso dall'impedire l'XSS, è difficile dire se sarà ** "buono" ** abbastanza per il tuo scenario. – Sam

+0

token @Sam per xss? – itachi

+0

@itachi Il token CSRF di Laravel viene utilizzato per prevenire richieste cross-site (in genere XSS).È un token salvato nella sessione del sito Web e inviato con ogni invio di moduli, quindi un modulo deve essere inviato dal sito Web con la sessione per avere la sessione corretta ... piuttosto che fingere una richiesta con lo scripting cross-site. – Sam

risposta

4

laravel dovrebbe fare questo per voi, voi non hanno bisogno per gestire la creazione/eliminazione di _token

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

Vedere la sezione 'Protezione CSRF' nella documentazione qui: http://laravel.com/docs/security

+0

Im usando AngularJS in FronEnd, sto mandando il token CSRF su ogni richiesta XHR, non sto gestendolo in modo regolare –

+1

Ho provato a usare Session :: token() e altri metodi per recuperare il token, ma Laravel non rinnega il Token, la mia domanda era SE DEVO RIGENERARE il Token o semplicemente usare lo stesso sull'intera sessione –

2

Dipende . Se l'attaccante non è MITM, nel senso che non possono intercettare il traffico tra la tua app Web e il server API, dovrebbe essere sufficiente un singolo token CSRF per l'intera sessione.

Supponendo che le operazioni sensibili siano sul lato server (ossia consentono l'accesso alle risorse solo al proprietario della risorsa, ad esempio "elimina il mio account", ecc.) Il token garantisce che il browser che effettua la richiesta sia il browser dell'utente legittimo e autenticato. È tutto ciò di cui dovresti preoccuparti, penso.

D'altra parte, se l'utente malintenzionato è in grado di esaminare il traffico non sicuro tra l'app Web e la propria API, può ottenere il token CSRF e il proprio session_id e fare cose diaboliche in modo trasparente. In tal caso, concedere, utilizzare e successivamente scartare un token per ogni richiesta (POST o qualsiasi altro tipo che fa un'operazione sensibile) rende solo il loro lavoro un po 'più difficile, ma sei ancora condannato.

miei 2 centesimi ...

+0

Questa risposta dovrebbe essere accettata dall'OP poiché è l'unica che effettivamente cerca di rispondere alla sua domanda. –

7

Con laravel 5 utilizzando i modelli Blades, è abbastanza facile.

Se si desidera solo il valore del token CSRF, è possibile generare scrivendo:

{{ csrf_token() }} 

che genera il valore simbolico come questo:

7YC0Sxth7AYe4RFSjzaPf2ygLCecJhPbyXhz6vvF 

Se sei utilizzando i moduli, è possibile aggiungere la seguente riga di codice all'interno del modulo:

{{ csrf_field() }} 

che genererà HTML come questo:

<input type="hidden" name="_token" value="7YC0Sxth7AYe4RFSjzaPf2ygLCecJhblahblah"> 
Problemi correlati