2009-02-05 11 views
7

In asp.net sto implementando un IHttpModule per mitigare gli attacchi CSRF. Inietta nella risposta html un parametro di modulo nascosto con asp.net SessionID su GETs. Sui POST verifica quindi che il valore del parametro nascosto corrisponda al SessionID corrente. Per quanto ne so, l'unico modo per ottenere il valore SessionID proviene dal cookie, che non può essere letto o determinato dal sito dannoso. C'è qualcosa che sto trascurando?Token di convalida CSRF: ID di sessione sicuro?

risposta

8

questo approccio è corretto. Devi assicurarti che tutte le azioni disponibili tramite un'operazione GET siano "sicure" (che è comunque la migliore pratica), dal momento che stai applicando la tua protezione XSRF solo ai POST.

Per un'assicurazione aggiuntiva, è possibile utilizzarlo anche su GET (aggiungendo un parametro URL a tutti i collegamenti e verificandolo in ogni richiesta GET), ma è ingombrante.

Se sei un paranoico in più, puoi scegliere un numero casuale diverso per l'ID alternativo. Questo ti proteggerà anche se un browser rende erroneamente il tuo cookie di sessione accessibile ad alcuni Javascript ostili su un altro sito. Quando viene creata una sessione, scegli un altro grande numero casuale e memorizzalo nella sessione.

+0

Probabilmente non mi preoccuperò dei GET per ora, dal momento che non è valido (ma ovviamente possibile) che http cambi stato con loro. Finché manteniamo quella convenzione/standard, dovremmo stare bene. Potrei cercare di usare un valore diverso da SessionID per una maggiore sicurezza come hai detto tu - grazie. – ironsam

6

Idealmente si vorrebbe usare qualcosa di diverso dall'ID di sessione, ma in fondo è tutto. OWASP suggerisce di utilizzare un nome di elemento di forma casuale che viene archiviato nella sessione dell'utente. In questo modo un attaccante non sarebbe nemmeno in grado di forgiare il campo nascosto corretto.

http://www.owasp.org/index.php/Top_10_2007-A5#Protection

+0

Randomizzare il nome dell'elemento del modulo è un'idea interessante. Grazie per il link. – ironsam