2 votes

Assurez-vous que l'utilisation de ce générateur de nombres pseudo-aléatoires est sûre, ici

Lorsque j'ai déclaré une variable comme :

const FileId = Math.random().toString(36).substr(2, 9);

J'obtiens cette erreur dans Sonar :

Assurez-vous que l'utilisation de ce générateur de nombres pseudo-aléatoires est sûre ici.

Comment dois-je aborder cette question ? Qu'est-ce qui ne va pas dans mon code ?

Quelqu'un peut-il m'aider ?

3voto

mplungjan Points 36458

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);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X