Больше не используйте Math.random() для генерации случайных чисел

внешний интерфейс

Недавно я обнаружил важное предупреждающее сообщение при использовании SonarQube для оценки качества кода, и рекомендуется не использовать Math.random() для генерации случайных чисел.

Math.random() генерирует псевдослучайные числа:

Функция Math.random() возвращает число с плавающей запятой, псевдослучайное число в диапазоне (0, 1), которое генерирует случайное число, которое не может обеспечить такую ​​же безопасность, как пароль (хакер может вычислить случайное число, сгенерированное клиент). Не используйте их для вещей, связанных с безопасностью. Вместо этого используйте Web Crypto API и более точный метод window.crypto.getRandomValues().

Уязвимость информационной безопасности, вызванная Math.random

CVE-2013-6386
CVE-2006-3419
CVE-2008-4102

Рекомендуется использовать криптографически стойкий генератор псевдослучайных чисел:

// crypto需要考虑浏览器兼容
const crypto = window.crypto || window.webkitCrypto || window.mozCrypto || window.oCrypto || window.msCrypto;
crypto.getRandomValues(new Uint32Array(1));

Метод Crypto.getRandomValues() позволяет получить криптографически безопасные случайные значения. Массив входящих параметров дополняется случайными значениями (случайными в криптографическом смысле).