ruby-on-rails 削除 確認 - Railsの署名付きCookieと暗号化Cookieの違いは何ですか?




1 Answers

それは微妙ですが、答えはあなたが提供したドキュメントにあります。 署名されたクッキーは改ざんを防ぎますが、暗号化されたクッキーは読み取りや改ざんを防ぎます。

具体的には、署名されたクッキーはActiveSupport::MessageVerifierを呼び出して、ダイジェスト( ActiveSupport::MessageVerifierを使用して生成)をクッキーに追加します。 クッキーの値が変更された場合、ダイジェストは一致しなくなり、 secret_key_baseの値がsecret_key_baseば、クッキーに署名することはできません。 しかし、クッキーの値は単にbase64でエンコードされているため、誰でも読むことができます。

ダイジェストを生成する前に実際にクッキーの値を暗号化するためにActiveSupport::MessageEncryptorと呼ばれる暗号化されたクッキー。 署名付きCookieと同様、Cookieの値が変更された場合、ダイジェストはもはや一致しませんが、さらにsecret_key_baseなしでCookieの値を復号化することはできません。

暗号化されたクッキーと署名されたクッキーを使用する時期は、クッキーに保存する情報の機密性によって決まります。 保護したいのは、Cookieを変更した人だけです。それに署名してください。ただし、データの秘密を保持する必要がある場合は、暗号化してください。

有効期限 セッション

ActionDispatch::Cookiesのドキュメントには、署名付きCookieと暗号化されたCookieの両方について、ほとんど同じ記述があります。 どちらもsecrets.secret_key_baseを使用してクライアント側の改ざんを防止しているようです。 http://api.rubyonrails.org/classes/ActionDispatch/Cookies.html

署名されたクッキー

署名付きのCookieを設定します。これにより、ユーザーはその値を改ざんできなくなります。 クッキーは、あなたのアプリのsecrets.secret_key_base値で署名されています。 署名付きのcookies.signed[:name]を使用して読み取ることができますcookies.signed[:name]

cookies.signed[:user_id] = current_user.id

暗号化されたクッキー

暗号化されたクッキー値をクライアントに送信する前に設定し、ユーザーが値を読み取ったり改ざんしたりするのを防ぎます。 クッキーは、あなたのアプリのsecrets.secret_key_base値で署名されています。 暗号化されたメソッドcookies.encrypted[:name]を使用して読み取ることができますcookies.encrypted[:name]

cookies.encrypted[:discount] = 45

私の質問です:2つの違いは何ですか?

いつ他のものを使ってみたいと思いますか?




Related