Безопасно ли использовать redis-rails в качестве хранилища сеансов?

При использовании в качестве хранилища сеансов я заметил, что redis-rails сохраняет идентификатор сеанса в незашифрованном формате в файле cookie. Разве идентификатор сессии не должен рассматриваться как защищенная информация и не должен быть открыт в файле cookie, незашифрованном для предотвращения попыток перехвата сеанса?

1 ответ

Решение

Нет.

Файл cookie идентификатора сеанса является единственным (достойным) способом связать клиента с сеансом. У клиента должны быть какие-то претензии, которые они могут передать вместе с запросом, чтобы мы могли их идентифицировать.

Это применяется независимо от того, используете ли вы CookieStore, Redis, ActiveRecord или memcached.

Шифрование идентификатора сеанса с фиксированной солью или без соли абсолютно ничего не изменит, кроме того, что злоумышленник в любом случае получит доступ к cookie-файлам при атаке "человек посередине" или XSS.

Если бы вы использовали соль, вам также пришлось бы связать ее с пользователем. Теперь у вас две проблемы вместо одной.

Хотя вы могли бы использовать несколько новых подходов, таких как соление с помощью пользовательского агента, ip или что-либо еще, что, по вашему мнению, вы знаете о клиенте, преимуществ безопасности мало.

Как сказал @pvg:

Идентификаторы сессии просто должны быть случайными, непредсказуемыми и достаточно большими.

Значимые способы защиты сессии:

  • Используйте https, чтобы предотвратить атаки "человек посередине".
  • Вызов reset_session при входе и выходе пользователей, чтобы избежать фиксации сессии.
  • Дезинфицировать пользовательский ввод, чтобы избежать XSS.
Другие вопросы по тегам