Подтвердить что ты не робот

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

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

случайные 17 символов [a-zA-Z0-9] + глобально уникальный id + случайный 17 символов [a-zA-Z0-9].

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

4b9b3361

Ответ 1

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

  • Код должен быть действительно случайным (читается с MCRYPT_DEV_URANDOM) и не должен быть зациклен на другой информации, связанной с пользователем.
  • В идеале код кодируется base62 (A-Z a-z 0-9), чтобы избежать проблем с Url.
  • Хранить только хеш маркера в базе данных, в противном случае злоумышленник с доступом для чтения к базе данных может reset любой учетной записи.

Это приводит к тому, что вы должны найти хэш токена в базе данных после того, как пользователь щелкнул ссылку. Существует два возможных способа сохранения токена:

  • У вас есть маркер с хеш-алгоритмом, подобным SHA512 без соли. Это безопасно, если токен очень сильный (минимальная длина 20 с 0-9 a-z A-Z). Теоретически вам нужно проверить, существует ли такой хеш, прежде чем вводить его в базу данных, на практике это незначительно. Я применил пароль - reset класс, который может обрабатывать такие токены.
  • У вас есть знак с BCrypt и солью. Это позволяет использовать более короткие токены, но вы не можете искать хешированный токен в базе данных. Вместо этого вы должны указать идентификатор строки в ссылке, чтобы найти токен.