簡體   English   中英

Rails 4:如何解密rails 4會話cookie(給定會話密鑰和秘密)

[英]Rails 4: How to decrypt rails 4 session cookie (Given the session key and secret)

在Rails 3中,會話cookie可以使用base64解碼輕松解碼,但在Rails 4中,cookie被編碼和加密。

我想知道如何讀取編碼和加密的rails 4 cookie(假設我們知道密鑰庫)。

謝謝,

Rails 4使用AES-256根據您應用的secret_token_base使用密鑰加密Cookie。

以下是解密會話cookie的一般方案:

  1. 計算你的秘密密鑰
  2. Base 64解碼cookie值
  3. 將解碼后的cookie值拆分為“ - ”,這將產生兩部分,第一部分是加密數據,第二部分是加密方案使用的初始化向量。 Base 64獨立地解碼每個部分。
  4. 通過對密鑰和初始化向量應用AES解密來解密加密數據。

我找不到一個可以輕松解密消息的網站(建議是受歡迎的),以編程方式可以這樣做:

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)

幾個筆記:

  • 此代碼段幾乎與ActiveSupport::MessageEncryptor的實際_decript方法實現相同,后者由ActionDispatch::Cookies middelware使用。

  • 從ActionDispatch :: Session :: CookieJar開始,這些都是Rails 4的特定內容:

    如果您只設置了secret_token ,那么您的cookie將被簽名,但不會加密 這意味着用戶無法在不知道應用的密鑰的情況下更改其+ user_id +,但可以輕松讀取他們的+ user_id +。 這是Rails 3應用程序的默認設置。

    如果您設置了secret_key_base ,您的cookie將被加密 這比簽名cookie更進一步,因為加密的cookie不能被用戶更改或讀取。 這是Rails 4中的默認開頭。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM