Ils veulent vous alerter sur le fait que Math.random n'est pas un vrai générateur aléatoire, mais un PRNG . Si vous voulez que cela soit sûr, vous avez besoin d'une CSPRNG .
Voici les spécifications
L'utilisation de générateurs de nombres pseudo-aléatoires (PRNG) est sensible à la sécurité.
Lorsqu'un logiciel génère des valeurs prévisibles dans un contexte nécessitant de l'imprévisibilité, il peut être possible pour un attaquant de deviner la prochaine valeur qui sera générée, et d'utiliser cette supposition pour se faire passer pour un autre utilisateur ou accéder à des informations sensibles.
Comme la fonction Math.random() repose sur un générateur de nombres pseudo-aléatoires faible, cette fonction ne doit pas être utilisée pour des applications critiques en matière de sécurité ou pour la protection de données sensibles. Dans un tel contexte, un générateur de nombres pseudo-aléatoires cryptographiquement fort (CSPRNG) doit être utilisé à la place.
Demandez-vous si
- le code utilisant la valeur générée nécessite qu'elle soit imprévisible. C'est le cas pour tous les mécanismes de cryptage ou lorsqu'une valeur secrète, telle qu'un mot de passe, est hachée.
- la fonction que vous utilisez génère une valeur qui peut être prédite (pseudo-aléatoire).
- la valeur générée est utilisée plusieurs fois.
- un attaquant peut accéder à la valeur générée.
Vous êtes à risque si vous avez répondu oui à la première question et à l'une des suivantes.
Exemple de code
const crypto = window.crypto || window.msCrypto;
var array = new Uint32Array(1);
crypto.getRandomValues(array); // Compliant for security-sensitive use cases
const FileId = array[0];
console.log(FileId);