Token CSRF in applicazioni a pagina singola (JavaScript / angolare)

1

Possiedo una SPA AngularJS servita da Apache su un host web economico. Tutta la comunicazione verso il back-end avviene tramite le chiamate Ajax REST verso un costoso server cloud che esegue Tomcat. In che modo le chiamate REST possono essere protette da CSRF dato che il frontend e il backend sono ospitati su server diversi?

Fondamentalmente il server Apache deve emettere i token CSRF e il server Tomcat essere in grado di riconoscerli. Supponiamo che siano sotto lo stesso dominio.

    
posta marting 04.12.2015 - 06:50
fonte

1 risposta

2

Per implementare la protezione CSRF, è necessario un token segreto, nel senso che non può essere calcolato da un utente malintenzionato. Puoi utilizzare una modifica del modello di token crittografato dal cheat di OWASP CSRF .

È possibile utilizzare una chiave segreta condivisa tra il front-end e il back-end o una chiave pubblica / privata, archiviando la chiave pubblica sul front-end e la chiave privata sul back-end. Quindi crittografare l'ID utente e la data / ora sul front-end da utilizzare come token CSRF e verificarlo sul back-end. Invece della crittografia puoi firmare i dati utilizzando un HMAC o un firma digitale . Tutte le opzioni (crittografia asimmetrica, crittografia simmetrica, HMAC e firme digitali) produrranno le proprietà dei token desiderati per essere facilmente verificabili ma effettivamente impossibili da prevedere.

Il documento OWASP suggerisce di crittografare l'id utente, il timestamp e un nonce, ma credo che il nonce non sia necessario. Vedi questa domanda e il commento sul Pagina di discussione OWASP per ulteriori informazioni.

    
risposta data 04.12.2015 - 23:23
fonte

Leggi altre domande sui tag