最佳实践是在用户成功登录时调用reset_session并在用户注销时再次调用它吗?这样做有任何副作用/问题吗?
The Ruby on Rails 安全指南 http://guides.rubyonrails.org/security.html#sessions建议在身份验证成功后重置会话 ID,以防止会话固定 https://www.owasp.org/index.php/Session_fixation漏洞。本质上,会话固定涉及攻击者设置您的会话 id(或者当您点击登录页面时能够知道 id 的其他方法),并且在您成功进行身份验证后,攻击者使用以下方法为自己的浏览器设置 cookie您的会话 ID,随后将被验证为您。身份验证成功后重置会话 ID 可以完全缓解此类漏洞。创建操作中的一些示例代码可能如下所示:
def create
user = User.find_by_email(params[:email])
if user && user.authenticate(params[:password])
old_values = session.to_hash
reset_session
session.update old_values.except('session_id')
session[:athlete_id] = athlete.id
redirect_to root_url, notice: "Authentication successful!"
else
flash.now.alert = "Invalid credentials"
render "new"
end
end
请注意,如果您希望保留任何数据,请务必在重置会话之前复制会话。
至于在注销时调用reset_session,是的,这也是最佳实践。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)