加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 无意间的会话劫持问题,使用Restful身份验证

发布时间:2020-12-16 21:40:52 所属栏目:百科 来源:网络整理
导读:我正在使用在 github上找到的restful_authentication的当前版本,我遇到了一堆奇怪的会话问题.服务器似乎是以某种方式向不需要的用户分配会话.这只会在穿过注销/登录屏障时发生. 这是一个例子.在服务器上没有活动的会话中,我登录到用户A的帐户.在另一台机器上
我正在使用在 github上找到的restful_authentication的当前版本,我遇到了一堆奇怪的会话问题.服务器似乎是以某种方式向不需要的用户分配会话.这只会在穿过注销/登录屏障时发生.

这是一个例子.在服务器上没有活动的会话中,我登录到用户A的帐户.在另一台机器上,我用用户B登录.然后在注销用户B之后,在注销重定向发生之后的某个时刻,我将以用户A.从这一点上,我可以继续浏览网站,就像我以该用户登录一样!通过日志观察到的是,当这个劫持发生时,会话ID不一样.用户A在两个会话中登录,但会话ID完全不同.这仅仅是可能发生的一个例子.我不能可靠地再现这个问题,因为它看起来是随机的.

它似乎不是环境或运行的服务器的症状.我可以用杂种和乘客再现这个问题.我也在开发和生产中看到它.我在这个应用程序中使用基于数据库的会话,它正在Rails 2.1.1上运行.在调用生成器时应用了状态选项.否则,对会话的处理方式没有其他修改.

更新
这是直接来自restful_authentication的违规方法.

# Accesses the current user from the session.
# Future calls avoid the database because nil is not equal to false.
def current_user
  @current_user ||= (login_from_session || login_from_basic_auth || login_from_cookie) unless @current_user == false
end

解决方法

如果您(或那些写了restful_authentication的人)缓存当前用户在类变量中,则可能会发生这种情况.我看到一些文章主张使用“User.current_user”,但由于类被缓存在请求之间,这可能会导致会话污染.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读