Вот мой план и цели:
Общие цели:
- Безопасность с определенной простотой и возможностью переноса базы данных в базу данных, потому что я не эксперт и могу все испортить, и я не хочу просить множество пользователей сбрасывать свои пароли.
- Легко стереть пароли для публикации "протертой" базы тестовых данных. (например, я хотел бы иметь возможность использовать оператор postgresql, чтобы просто сбросить все пароли на что-то простое, чтобы тестировщики могли использовать эти данные тестирования для себя).
План:
Хеширование паролей
При создании учетной записи навсегда сохраняется исходный адрес электронной почты, с которым создается учетная запись.
- Используется глобальная соль, например "90fb16b6901dfceb73781ba4d8585f0503ac9391".
- Используется специальная соль учетной записи, исходный адрес электронной почты, с которым была создана учетная запись, например "[email protected]".
- Используется пароль пользователя, например "password123" (я буду предупреждать о ненадежных паролях в форме регистрации)
Комбинация глобальной соли, соли для конкретной учетной записи и пароля хэшируется с помощью некоторого метода хеширования в postgresql (не удалось найти документацию по функциям хеширования в postgresql, но возможность использовать sha-2 или что-то в этом роде было бы хорошо, если бы я смог его найти).
Хеш сохраняется в базе данных.
Восстановление аккаунта
Чтобы изменить свой пароль, они должны пройти стандартный сброс пароля (и это письмо для сброса будет отправлено на исходный адрес электронной почты, а также на последний адрес электронной почты учетной записи, который они установили).
Недостатки?
Есть ли здесь какие-либо недостатки, которые мне нужно исправить? И есть ли лучшие практики для полного хеширования в postgresql?