Лучшая практика при генерировании токенов сброса паролей

StackOverflow https://stackoverflow.com//questions/20013672

  •  21-12-2019
  •  | 
  •  

Вопрос

Любая лучшая практика на том, как следует построить токен пароля сброса?Я думаю:

Случайные 17 символов [A-ZA-Z0-9] + глобально уникальный ID + случайные 17 символов [A-ZA-Z0-9].

Есть ли лучший раствор, или отраслевой стандарты на сбросе паролей токенов?

Это было полезно?

Решение

Есть некоторые важные моменты для рассмотрения.

  1. Код должен быть действительно случайным (читать от mcrypt_dev_Urandom) и не должен быть зарекомендовавшись от другой информации о пользователе.
  2. В идеале код код Base62 кодируется (A-Z A-Z 0-9), чтобы избежать проблем с URL.
  3. магазин только Хэш токена в базе данных , в противном случае злоумышленник с доступом к чтению в базе данных может сбросить любую учетную запись.
  4. Это приводит к проблеме, которую вы должны найти хэш токена в базе данных, после того как пользователь нажал на ссылку. Существует два возможных способа хранения токена:

      .
    • Вы хеш-токен с хеш-алгоритмом, как SHA512 без соли. Это безопасно, если токен очень сильный (минимальная длина 20 с 0-9 A-Z A-Z). Теоретически вы должны проверить, существует ли такое хэш, прежде чем ввести его в базу данных, на практике это незначительно. Я реализовал класс сброса паролей , который может обрабатывать такие токены.
    • Вы хеш-токен с bcrypt и солью. Это позволяет более короткие токены, но вы не можете искать хэш-токен в базе данных. Вместо этого вы должны включить ряд id в ссылке, чтобы найти токен.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top