【发布时间】:2020-09-10 17:01:04
【问题描述】:
假设我从浏览器请求中复制了 cookie 的字符串。
_some_session=RXF6SVF5RHdV...
我想打开 rails 控制台并粘贴类似的东西
> session[RXF6SVF5RHdV...]
从会话中检索解密的数据。如果可以,我该怎么做?
【问题讨论】:
标签: ruby-on-rails session ruby-on-rails-5
假设我从浏览器请求中复制了 cookie 的字符串。
_some_session=RXF6SVF5RHdV...
我想打开 rails 控制台并粘贴类似的东西
> session[RXF6SVF5RHdV...]
从会话中检索解密的数据。如果可以,我该怎么做?
【问题讨论】:
标签: ruby-on-rails session ruby-on-rails-5
这是一个也适用于非基于 cookie 的会话的答案。 IE。通常,您将保存在 cookie 中的只是会话 ID。现在给定会话 ID,您可以独立于使用的会话存储(文件、缓存、ActiveRecord)查找会话数据,如下所示:
def lookup_session_data(session_id)
session_store = Rails.application.config.session_store.new nil, {}
_id, data = session_store.find_session({}, Rack::Session::SessionId.new(session_id))
data if data.present?
end
session_id = "..."
lookup_session_data session_id
【讨论】:
是的,有可能,这里有更详细的方法,打开你的 Rails 控制台试试这个:
content = 'BAh7CEkiD3Nlc3Npb25faWQGOgZFRkkiJTgwZGFiNzhiYWZmYTc3NjU1ZmVmMGUxM2EzYmEyMDhhBjsAVEkiFGdpdGh1Yl91c2VybmFtZQY7AEZJIhJuZWVyYWpkb3RuYW1lBjsARkkiEF9jc3JmX3Rva2VuBjsARkkiMU1KTCs2dXVnRFo2R2NTdG5Kb3E2dm5BclZYRGJGbjJ1TXZEU0swamxyWU09BjsARg%3D%3D--b5bcce534ceab56616d4a215246e9eb1fc9984a4'
假设内容是您的会话 cookie,
当内容被写入 cookie 时,它会被转义。所以首先我们需要取消它。
> unescaped_content = URI.unescape(content)
=> "BAh7CEkiD3Nlc3Npb25faWQGOgZFRkkiJTgwZGFiNzhiYWZmYTc3NjU1ZmVmMGUxM2EzYmEyMDhhBjsAVEkiFGdpdGh1Yl91c2VybmFtZQY7AEZJIhJuZWVyYWpkb3RuYW1lBjsARkkiEF9jc3JmX3Rva2VuBjsARkkiMU1KTCs2dXVnRFo2R2NTdG5Kb3E2dm5BclZYRGJGbjJ1TXZEU0swamxyWU09BjsARg==--b5bcce534ceab56616d4a215246e9eb1fc9984a4"
请注意,在最后 unescaped_content 有 -- 。那是一个分离标记。 -- 之前的值是真正的有效载荷。 -- 后面的值是数据摘要。
> data, digest = unescaped_content.split('--')
=> ["BAh7CEkiD3Nlc3Npb25faWQGOgZFRkkiJTgwZGFiNzhiYWZmYTc3NjU1ZmVmMGUxM2EzYmEyMDhhBj VEkiFGdpdGh1Yl91c2VybmFtZQY7AEZJIhJuZWVyYWpkb3RuYW1lBjsARkkiEF9jc3JmX3Rva2VuBjsARkkiMU1KTCs2dXVnRFo2R
2NTdG5Kb3E2dm5BclZYRGJ
GbjJ1TXZEU0swamxyWU09BjsARg==", "b5bcce534ceab56616d4a215246e9eb1fc9984a4"]
The data is Base64 encoded. So let’s unecode it.
> Marshal.load(::Base64.decode64(data))
=> {"session_id"=>"80dab78baffa77655fef0e13a3ba208a",
"github_username"=>"manoj910",
"_csrf_token"=>"MJL+6uugDZ6GcStnJoq6vnArVXDbFn2uMvDSK0jlrYM="}
So we are able to get the data that is stored in cookie.
【讨论】: