我已经运行了Rails应用程序,似乎每隔一段时间用户就会从其他用户那里获取cookie session_id值。
我使用active_record_store来跟踪Rails中的会话。
current_user方法:
def current_user
@current_user ||= session[:user_id] ? User.find_by_id(session[:user_id]) : nil
return @current_user
end
我使用Apache 2.2.15在Windows机器上运行8个ruby进程。有时它会向用户提供不正确的session_id
。我的rails版本是2.1.2
在日志文件中,我可以看到用户更改了其他用户的session_id
。
例如:
Processing Manage::TruckController#show (for 179.34.103.8 at 2011-05-12 07:35:24) [POST]
Session ID: 1fbc801bbade1007291901ca810bfeda1eab76
....
Completed
5分钟后会获得不同的会话ID,但属于有效用户。
Processing Manage::TruckController#edit (for 179.34.103.8 at 2011-05-12 07:40:01) [POST]
Session ID: 2f8e84c40c490c509feabbce9701aa9101ba0f
....
Completed
对我而言,似乎Rails正在将错误的session_id数据分发给存储在用户的Web浏览器上的cookie。
对此有何建议?
答案 0 :(得分:0)
从the code和。{ the security guide,似乎MD5碰撞的可能性很小。虽然这种情况不太可能发生或者可以重现,所以我更倾向于说这与浏览器测试有关。
我首先要确保您的浏览器没有使用Charles等工具提供这些错误的会话ID。
我还建议尽可能使用cookie会话,以避免出现此类问题。
最后,由于您运行的是相当旧版本的Rails,因此可能值得尝试升级。你可能会遇到一个旧的错误。
答案 1 :(得分:0)
我发现这非常有用。 how-do-i-prevent-rails-users-from-accidentally-authenticating-as-the-wrong-user
如果你是:
客户端浏览器将保留一个包含user_id的有效会话,该user_id可能属于该用户,也可能不属于该用户。
我有一个类似的问题并使用类似的代码片段解决了它 this comment by mdesantis on managing Rails secret token