Ho ereditato un code-base che include un dispositivo mobile e amp; app web che accedono entrambe alla stessa API e sono state incaricate di correggere alcuni dei buchi di sicurezza esistenti, sfortunatamente non sono esperto nell'argomento. Ora capisco che le vulnerabilità che sto osservando si applicano solo al web, ma vorrei minimizzare le modifiche richieste sul terminale mobile, e dal momento che questo servizio coinvolge entrambi, sto cercando consigli sulla situazione.
Sia web che amp; mobile riceve un token di accesso memorizzato in un cookie sicuro che utilizza per accedere all'API. Questo funziona perfettamente bene per il lato mobile, ma è aperto a CSRF sul web. Usando il SOP e la nostra politica CORS, siamo in grado di disabilitare altre origini dalla lettura dei dati, ma ovviamente possono ancora apportare modifiche al server (ad es. Cancellare, aggiornare).
Una soluzione che è stata creata è quella di passare alla memorizzazione del token di accesso nell'archivio Web in modo da non essere vulnerabili agli attacchi CSRF (perché sono protetti da domini). Questo naturalmente ci aprirà alle vulnerabilità XSS ma, per quanto a nostra conoscenza, l'app Web è sicura a tale riguardo (tutti gli input dell'utente sono disinfettati e convalidati e nessun input dell'utente viene emesso direttamente nel DOM). Ma, mi è stato detto (non riesco a trovare riferimenti) che i plug-in del browser possano iniettare il codice nel DOM e avere libero accesso a quei valori di archiviazione che rendono la nostra sicurezza sostanzialmente discutibile.
Un'altra soluzione sarebbe quella di utilizzare una delle soluzioni delineate nel foglio cheat CSRF ma richiederebbe uno stato extra sul server e riscrivere il modo in cui i client mobili gestiscono i loro cookie e richieste e non è l'ideale.
Quindi una soluzione migliore di cui sopra sarebbe quella di separare il web & API mobili per consentire le soluzioni di vulnerabilità CSRF senza dover apportare modifiche alle app mobili.
Quindi sono curioso che cosa suggerirei sarebbe la soluzione migliore a questo problema, o forse mi manca qualcosa che potrebbe essere una soluzione più semplice (ad esempio CSP, non sono sicuro che sarebbe in grado di prevenire certi XSS fori?).