使用Restful Authentication进行无意中的会话劫持问题

Jar*_*red 10 ruby rest ruby-on-rails restful-authentication

我正在使用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
Run Code Online (Sandbox Code Playgroud)

Jar*_*red 2

我不知道这是否是一个答案,因为它是一个解决方法。我所做的只是切换到基于 cookie 的会话,一切都很顺利。