Безопасно ли использовать redis-rails в качестве хранилища сеансов?
При использовании в качестве хранилища сеансов я заметил, что redis-rails сохраняет идентификатор сеанса в незашифрованном формате в файле cookie. Разве идентификатор сессии не должен рассматриваться как защищенная информация и не должен быть открыт в файле cookie, незашифрованном для предотвращения попыток перехвата сеанса?
1 ответ
Нет.
Файл cookie идентификатора сеанса является единственным (достойным) способом связать клиента с сеансом. У клиента должны быть какие-то претензии, которые они могут передать вместе с запросом, чтобы мы могли их идентифицировать.
Это применяется независимо от того, используете ли вы CookieStore, Redis, ActiveRecord или memcached.
Шифрование идентификатора сеанса с фиксированной солью или без соли абсолютно ничего не изменит, кроме того, что злоумышленник в любом случае получит доступ к cookie-файлам при атаке "человек посередине" или XSS.
Если бы вы использовали соль, вам также пришлось бы связать ее с пользователем. Теперь у вас две проблемы вместо одной.
Хотя вы могли бы использовать несколько новых подходов, таких как соление с помощью пользовательского агента, ip или что-либо еще, что, по вашему мнению, вы знаете о клиенте, преимуществ безопасности мало.
Как сказал @pvg:
Идентификаторы сессии просто должны быть случайными, непредсказуемыми и достаточно большими.
Значимые способы защиты сессии:
- Используйте https, чтобы предотвратить атаки "человек посередине".
- Вызов
reset_session
при входе и выходе пользователей, чтобы избежать фиксации сессии. - Дезинфицировать пользовательский ввод, чтобы избежать XSS.