Stavo leggendo su XSRF e mi piacerebbe assicurarmi di aver compreso correttamente il problema e sapere se la mia applicazione è protetta da quel tipo di attacco.
Come comprendo CSRF funziona:
- aggiungendo una stringa casuale (?) che viene salvata nel tuo cookie dall'intestazione
set-cookie
o da un codice javascript (quindi non può essere solo HTTP quindi suppongo che sia meglio usareset-cookie
), in teoria è accessibile solo dal dominio che è stato impostato - quella stringa viene convalidata con ogni richiesta dell'API per garantire che la richiesta non venga effettuata da origini diverse
Soluzione che ho attualmente:
-
La sessione
- viene impostata dal server dopo l'autenticazione dell'utente (accesso) e il suo ID è impostato come cookie solo HTTPS
- ID sessione è una stringa casuale lunga salvata nel DB con informazioni sulla stringa del browser utente user user, IP e user ID
- JS non può accedere al cookie, tutte le richieste sono impostate con
XMLHttpRequest.withCredentials
per passare cookie al server - l'ID di sessione è validato con ogni richiesta anche contro user agent e IP La sessione
- è valida per 10 minuti, ma può essere estesa
Inoltre:
- Ho impostato CSP per consentire il contenuto solo per alcuni domini attendibili
- Ho configurato CORS per consentire solo le richieste di origini attendibili
Come vedo il mio ID di sessione si comporta un po 'come il token CSRF. Mi piacerebbe sapere che ho bisogno di un token CSRF aggiuntivo per evitare che XSRF o la soluzione che ho attualmente copra quella vulnerabilità in modo soddisfacente?
La sicurezza è un'area in cui sono nuovo e non mi sento sicuro di apprezzare qualsiasi aiuto.