Недавно я обнаружил важное предупреждающее сообщение при использовании SonarQube для оценки качества кода, и рекомендуется не использовать Math.random() для генерации случайных чисел.
Math.random() генерирует псевдослучайные числа:
Функция Math.random() возвращает число с плавающей запятой, псевдослучайное число в диапазоне (0, 1), которое генерирует случайное число, которое не может обеспечить такую же безопасность, как пароль (хакер может вычислить случайное число, сгенерированное клиент). Не используйте их для вещей, связанных с безопасностью. Вместо этого используйте Web Crypto API и более точный метод window.crypto.getRandomValues().
Уязвимость информационной безопасности, вызванная Math.random
Рекомендуется использовать криптографически стойкий генератор псевдослучайных чисел:
// crypto需要考虑浏览器兼容
const crypto = window.crypto || window.webkitCrypto || window.mozCrypto || window.oCrypto || window.msCrypto;
crypto.getRandomValues(new Uint32Array(1));
Метод Crypto.getRandomValues() позволяет получить криптографически безопасные случайные значения. Массив входящих параметров дополняется случайными значениями (случайными в криптографическом смысле).