La documentation de ActionDispatch::Cookies
Donne des descriptions presque identiques pour les cookies signés et les cookies cryptés. Il semble que les deux utilisent secrets.secret_key_base
Pour empêcher la falsification côté client. http://api.rubyonrails.org/classes/ActionDispatch/Cookies.html
Définit un cookie signé, qui empêche les utilisateurs de falsifier sa valeur. Le cookie est signé par la valeur
secrets.secret_key_base
De votre application. Il peut être lu en utilisant la méthode signéecookies.signed[:name]
cookies.signed[:user_id] = current_user.id
Définit une valeur de cookie crypté avant de l'envoyer au client, ce qui empêche les utilisateurs de lire et de falsifier sa valeur. Le cookie est signé par la valeur
secrets.secret_key_base
De votre application. Il peut être lu en utilisant la méthode cryptéecookies.encrypted[:name]
cookies.encrypted[:discount] = 45
Ma question est: quelle est la différence entre les deux?
Quand voudriez-vous utiliser l'un sur l'autre?
C'est subtil, mais la réponse se trouve dans la documentation que vous avez fournie. Les cookies signés protègent uniquement contre la falsification, tandis que les cookies cryptés protègent contre la lecture et la falsification.
Plus précisément, les cookies signés appellent ActiveSupport::MessageVerifier
pour ajouter un résumé (généré à l'aide de secret_key_base
) au cookie. Si la valeur du cookie est modifiée, le résumé ne correspondra plus, et sans connaître la valeur de secret_key_base
, le cookie ne peut pas être signé. Cependant, la valeur du cookie est simplement encodée en base64 et peut être lue par n'importe qui.
Cookies cryptés appelés ActiveSupport::MessageEncryptor
pour chiffrer réellement la valeur du cookie avant de générer le résumé. Semblable aux cookies signés, si la valeur du cookie est modifiée, le résumé ne correspondra plus, mais en outre, la valeur du cookie ne peut pas être déchiffrée sans le secret_key_base
.
Quant à savoir quand vous utiliseriez des cookies cryptés ou signés, cela se résume à la sensibilité des informations que vous stockez dans le cookie. Si vous ne souhaitez vous protéger que si quelqu'un modifie le cookie, signez-le, mais si vous devez également garder les données secrètes, chiffrez-les.