Отличная работа!Выглядит очень полным для меня.
Единственные предложения, которые у меня были бы:
Поворот служебной соли.
Разработка метода периодического поворота службыобщепринятая соль и выполняйте ее регулярно.
Например, после создания новой сервисной соли используйте ее для всех новых учетных записей и любых изменений пароля.Когда существующий пользователь пытается войти в систему, аутентифицируйте его со старой солью сервиса.В случае успеха обновите их хеш новой солью сервиса (и, возможно, новой солью, специфичной для пользователя).Для пользователей, которые не входят в систему «некоторое время», случайным образом сгенерируйте новый пароль от их имени.Это будет «поддерживать» безопасность для пользователей, которые покинули ваш сайт, заставляя тех, кто возвращается, использовать средства сброса пароля.(«Некоторое время» = любой период, который вам удобен).
Не задавайте жестко код вашей сервисной соли.
Не разрешайте атаку LFIпоставить под угрозу вашу соль обслуживания.Подайте сервисную соль вашему приложению при запуске и сохраните его в памяти.Чтобы скомпрометировать служебную соль, злоумышленник должен иметь возможность выполнять код для чтения соли из памяти.Если злоумышленник может это сделать, вы все равно будете в хорошей форме.=)
Не используйте соль пользователей повторно.
Ищите возможности давать пользователям новые соли.Пользователь меняет свой пароль?Создать новую случайную соль.Это еще более затрудняет грубое форсирование вашей серверной соли, если злоумышленник сможет получить свой хэш, когда захочет.Сопоставьте это с регулярной ротацией вашей служебной соли, и я готов поспорить, что у вас есть сильное сдерживающее средство против грубого принуждения.
(Отметьте это как вики сообщества, если у других появятся дополнительные идеи).