Лучше ли использовать вызов reset_session, когда пользователь успешно выполняет вход и вызывается снова, когда пользователь подписывается? Есть ли побочные эффекты/проблемы для этого?Rails Login Сброс сеанса
ответ
Это действительно зависит от того, как вы храните вещи в сеансе и как вы хотите, чтобы безопасность работала.
Сброс сеанса будет отбрасывать все из сеанса пользователя, поэтому, если они вернутся обратно в экран входа в систему и занесут обратно, но все же имели (например) корзину для покупок, хранящуюся на их сеансе, вы очистите то, что может быть нежелательны.
Если вы не храните какие-либо данные, которые, как вы считаете, могут захотеть удержаться, я не знаю, как очистить сеанс до того, как будет обработана попытка входа в систему. Я рекомендую его.
Я считаю хорошей практикой сбросить сеанс при входе пользователя в систему. Таким образом, злонамеренные люди не могут вынюхивать свой файл cookie сеанса до того, как соединение клиента зашифровано и все еще использует его после того, как они используют знак в форме над HTTPS. Попытайтесь:
temp = session
reset_session
session.reverse_merge!(temp)
Таким образом, сеанс получает новые значения, сгенерированные reset_session, но любые другие переменные сеанса остаются нетронутыми.
Действительно ли это работает? С Rails 2, когда я пытаюсь получить данные из сеанса, вызывая reset_session и переназначая данные обратно на сеанс, при следующем запросе все пропало. –
Ruby on Rails Security Guide рекомендует сбросить идентификатор сеанса при успешной аутентификации для защиты от session fixation уязвимостей. По сути, фиксация сеанса подразумевает, что злоумышленник устанавливает ваш идентификатор сеанса (или какой-либо другой способ узнать, что представляет собой идентификатор при нажатии на страницу входа в систему), и после успешной аутентификации злоумышленник устанавливает cookie для своего браузера, используя ваш идентификатор сеанса и впоследствии аутентифицируется как вы. Сброс идентификатора сеанса при успешной аутентификации полностью смягчает такую уязвимость. Некоторые примеры кода в вашем создать действие может выглядеть так:
def create
user = User.find_by_email(params[:email])
if user && user.authenticate(params[:password])
temp_session = session.dup
reset_session
session.replace(temp_session)
session[:athlete_id] = athlete.id
redirect_to root_url, notice: "Authentication successful!"
else
flash.now.alert = "Invalid credentials"
render "new"
end
end
Обратите внимание, что это важно, чтобы дублировать сессию перед сбросом его, если есть какие-либо данные, которые вы хотите сохранить.
Что касается вызова reset_session при выходе из системы, да, это также лучшая практика.
В Rails 5 'session.replace' больше не будет работать. Однако вы можете получить старые значения с помощью 'old_values = session.to_hash' и восстановить их на новый сеанс с помощью' session.update (old_values) '. – Ritchie
@Ritchie Не копируется ли 'session_id'? Это намеренно? – Tallboy
Нет, ты прав. Я не уверен, какой вред он делает. Давайте изменим его как 'old_values = session.to_hash' и 'session.update old_values.except ('session_id')'. – Ritchie
Многие ответы здесь не устарели из-за изменения API Rails, поэтому я останусь здесь, что работает как минимум с Rails 5.0.
Как другие отметили руководство по безопасности Rails recommends, вызывающее reset_session
при входе во избежание атак сеансовой фиксации.
Вы можете сеанс очищается при входе в систему, но если вы просто хотите, чтобы изменить идентификатор сессии и держать все остальное (то есть никаких побочных эффектов), вы можете сделать это следующим образом:
def mitigate_session_fixation
old_values = session.to_hash
reset_session
session.update old_values.except('session_id')
end
- 1. ASP.NET Login Control Сброс failtext
- 2. Сброс сеанса в PowerShell
- 3. Сброс переменной сеанса Django
- 4. Сброс/Остановка сеанса PHP
- 5. Сброс сеанса сеанса на внешний источник POSTing URL
- 6. Использование login() теряет данные сеанса
- 7. Rails - Dynamically Login People
- 8. Rails Сброс голосов Thumbs_up
- 9. Отключение задания Rails: сброс
- 10. Rails PHP Login Integration
- 11. Subdomain Login Rails 3.2
- 12. Сброс сеанса в jsp без аннулирования
- 13. Сброс сеанса Magento по каждому запросу
- 14. Приращение и сброс переменной сеанса PHP
- 15. Сброс сеанса rdp с помощью psexec
- 16. Использует ли $ _SERVER ['PHP_SELF'] сброс сеанса?
- 17. Завершение сеанса, сброс переменных не работает?
- 18. PHP: Сброс продолжительности сеанса при перезагрузке
- 19. Meteor collection.update вызывает сброс переменной сеанса
- 20. Сброс сеанса входа пользователя в angularjs
- 21. Сохранение аутентифицированного сеанса через PHP Login
- 22. Rails Heroku - Сброс базы данных
- 23. Сброс Recaptcha in Rails формы
- 24. Rails: Сброс состояния рендеринга/перенаправления
- 25. rails login facebook api debug
- 26. Что касается Rails Application Login
- 27. Rails hang on Devise login
- 28. Rails API login using curl
- 29. Rails Проверка сеанса сеанса Rspec в декораторе
- 30. Rails 4 сеанса субдоменов
я вообще согласен с этот ответ, но стоит отметить ответ @rbhitchcock ниже, в частности ссылку на руководство по безопасности для фиксации сеанса. –