在Rails 3中,会话cookie可以使用base64解码轻松解码,但在Rails 4中,cookie被编码和加密。
我想知道如何读取编码和加密的rails 4 cookie(假设我们知道密钥库)。
谢谢,
答案 0 :(得分:5)
Rails 4使用AES-256根据您的应用secret_token_base
使用密钥加密Cookie。
这是解密会话cookie的一般方案:
我无法找到一个可以轻松解密邮件的网站(欢迎提供建议),编程方式可以这样做:
secret = OpenSSL::PKCS5.pbkdf2_hmac_sha1(app_secret_token, 'encrypted cookie', 1000, 64)
encrypted_message = Base64.decode64(cookie_str)
cipher = OpenSSL::Cipher::Cipher.new('aes-256-cbc')
encrypted_data, iv = encrypted_message.split("--").map {|v| ::Base64.strict_decode64(v)}
cipher.decrypt
cipher.key = secret
cipher.iv = iv
decrypted_data = cipher.update(encrypted_data)
decrypted_data << cipher.final
Marshal.load(decrypted_data)
几个笔记:
此代码段几乎与ActionDispatch::Cookies
middelware使用的实际_decript
method implementation in ActiveSupport::MessageEncryptor
完全相同。
这是特定的Rails 4,来自ActionDispatch :: Session :: CookieJar:
如果您只设置了 secret_token ,那么您的Cookie将已签名,但未加密。这意味着用户无法在不知道应用程序的密钥的情况下更改其+ user_id +,但可以轻松阅读其+ user_id +。这是Rails 3应用程序的默认设置。
如果您设置了 secret_key_base ,则您的Cookie将加密。这个 比签名的cookie更进一步,因为加密的cookie不能 被用户更改或阅读。这是Rails 4中的默认开始。