2015-03-29 17 views
7

consideri questo scenario carico:token CSRF di laravel e il bilanciamento

un'applicazione ha un percorso di accesso che è protetto da filtro CSRF di laravel:

Route::group(array('before' => 'csrf'), function() { 

    Route::post('/doLogin', array('as' => 'doLogin', 'uses' => '[email protected]')); 

}); 

L'applicazione si siede dietro un bilanciatore di carico, dove ogni richiesta è distribuito a caso su server01 o server02. Laravel è configurato per la permanenza delle sessioni in un database, condiviso da entrambi server01 e server02. Il percorso standard da seguire è: un utente accede a /, inserisce le proprie credenziali in un modulo di accesso e invia tali credenziali a /doLogin, che controlla il token, elabora le credenziali e restituisce l'utente a / in caso di errore o /home in caso di esito positivo.

La mia domanda è questa: dal momento che non c'è alcuna garanzia che un utente che accede / su server01 invierà al /doLogin su server01, lavorerà built-in CSRF gettoni di laravel? O dal momento che il token è memorizzato in Session, funzionerà indipendentemente da quale server viene assegnato dall'LB?

+0

Io uso redis per le sessioni su più server con bilanciamento del carico, ma csrf funziona perfettamente indipendentemente da quale server venga colpito .... e l'ho specificamente testato prendendo i server tra le richieste –

risposta

2

CSRF funzionerà indipendentemente dal server che colpisce se la sessione è condivisa tra questi server.

I driver di sessione di database, cookie e memcached/redis sono buoni.

Il driver di sessione di file non dovrebbe funzionare in modo usuale.

Il token CSRF del client viene confrontato con quello della sessione.

Problemi correlati