Я попытаюсь проанализировать ваш выбор:
Если сервер взломан с помощью CustomMemoryStore
Рассмотрим следующий сценарий:
- 4 Пользователи A, B, C, D вошли в систему.
- Ваш сервер взломан. Хакер получает контроль над сервером.
- D сделал какую-то операцию.
- Вы обнаружили, что ваш сервер взломан, и восстановили вашу систему.
С CustomMemoryStore хакер может получить пароли всех пользователей. Нетрудно внедрить некоторую логику в запущенный процесс Rails или выгрузить память и анализ. Хранение пароля в ActiveRecord, MongoDB, Redis имеет похожую проблему.
Если сервер взломан с помощью CookieStore?
Что, если произойдет предыдущий сценарий и вы используете CookieStore?
Давайте рассмотрим механизм CookieStore:
- На сервере есть секретный ключ для подписи и проверки сеанса.
- Каждый раз, когда браузер отправляет запрос, сервер расшифровывает сеанс, изменяет данные, подписывает сеанс и отправляет сеанс браузеру в файле cookie.
Другими словами, хакер не может получить пароль от куки или секретного ключа. Ему нужен и cookie, и секретный ключ, чтобы украсть пароль.
В этом случае пароли A, B, C являются безопасными. Только пароль D будет украден Хакером. Вы можете минимизировать ущерб, восстанавливая систему как можно скорее.
Проблема CustomMemoryStore
Помимо проблемы безопасности, я знаю, что вы знаете, что CustomMemoryStore не масштабируется. Тем не менее, проблема может быть больше, чем вы думаете. В действии контроллера вы отправите запрос другим веб-службам, он заблокирует весь ваш сервер, если удаленная служба работает медленно или не работает. Это может быть болезненно, даже если у вас есть только 1-10 пользователей одновременно.
Даже если вы решите запустить свое приложение на одном сервере, вы можете запустить процесс нескольких рельсов с помощью Passenger или Unicorn. CustomMemoryStore отрицает эти параметры.
Концерн безопасности клиента
Если проблема заключается в краже cookie со стороны браузера, вы можете рассмотреть EncryptedCookieStore . Он шифрует сеанс и сохраняет в клиенте cookie. Вы не можете получить пароль, если у вас есть только cookie или ключ. Вам нужен и cookie, и ключ для расшифровки пароля.
В чем основная проблема?
EncryptedCookieStore более безопасен, потому что он хранит зашифрованный пароль в cookie пользователя, а секретный ключ доступен только на сервере. Хакер не может получить пароль, если у него есть только cookie или секретный ключ - ему нужны оба.
Конечно, вы можете реализовать аналогичную логику с CustomMemoryStore. Например, сохраните зашифрованный пароль в памяти сервера, а отдельный ключ - в файле cookie. Если вы все же решили хранить зашифрованный пароль на сервере, я рекомендую использовать Redis для хранения. Это просто и быстро по сравнению с MySQL и MongoDB. CustomMemoryStore не предлагается из-за проблемы с масштабированием.
Другие предложения
Пароль другой системы - очень конфиденциальные данные, вы должны быть очень осторожны, чтобы иметь дело с проблемой безопасности. Если это государственная служба, вы должны очень тщательно написать свое Соглашение об условиях обслуживания и отказ от ответственности. Кроме того, вы должны запускать свои сервисы с HTTPS.
TL; DR
- Используйте OAuth, если можете (ну, я знаю, что вы не можете)
- EncryptedCookieStore должно быть простым и безопасным.
- Если вы решили сохранить пароль на сервере, пожалуйста, зашифруйте его и сохраните секретный ключ на стороне клиента (cookie).