Non consiglierei questo. Perché il token offra protezione, deve essere imprevedibile. Math.random()
non è crittograficamente sicuro - non esiste alcuna garanzia che un utente malintenzionato non possa generare carichi di valori casuali, rilevare il modello e quindi dedurre valori precedenti e quindi trovare il valore del token segreto. Si chiama "cross domain Math.random()
predizione" e puoi leggere ulteriori informazioni al riguardo qui e qui .
Penso (non sono sicuro, però) che i browser più moderni proteggano da questo in pratica, ma quello è un dettaglio di implementazione su cui non scommetterei la sicurezza della mia applicazione. In realtà, MDN mette in guardia contro it:
Math.random()
does not provide cryptographically secure random numbers. Do not use them for anything related to security. Use the Web Crypto API instead, and more precisely the window.crypto.getRandomValues()
method.
Quindi puoi passare a getRandomValues()
? Solo se stai bene con supporto browser 80% .
Prima di fare ciò, chiediti perché non puoi semplicemente generare il token sul server. Se vai comunque per l'approccio del cliente, evita almeno queste due insidie:
- Assicurati che nessun token nel modulo e nessun token nel cookie non passi! Un ingenuo controllo di uguaglianza potrebbe consentire il passaggio, dal momento che entrambi sono una stringa vuota, ma ciò aprirebbe una vulnerabilità.
- Non deve esserci alcun URL che carica una pagina e invia automaticamente un modulo, aggiungendo il token nel processo. Tale URL potrebbe essere abusato.