ruby-on-rails - variable - rails session id
¿Cuál es la diferencia entre las cookies firmadas y cifradas en Rails? (1)
La documentación de ActionDispatch::Cookies
proporciona descripciones casi idénticas para las cookies firmadas y las cookies cifradas. Parece que ambos usan secrets.secret_key_base
para evitar la manipulación del lado del cliente. http://api.rubyonrails.org/classes/ActionDispatch/Cookies.html
Cookies firmadas
Establece una cookie firmada, que evita que los usuarios alteren su valor. La cookie está firmada por el valor
secrets.secret_key_base
su aplicación. Se puede leer utilizando el método firmadocookies.signed[:name]
cookies.signed[:user_id] = current_user.id
Las cookies cifradas
Establece un valor de cookie cifrado antes de enviarlo al cliente, lo que impide que los usuarios lean y alteren su valor. La cookie está firmada por el valor
secrets.secret_key_base
su aplicación. Se puede leer utilizando el método encriptadocookies.encrypted[:name]
cookies.encrypted[:discount] = 45
Mi pregunta es: ¿Cuál es la diferencia entre los dos?
¿Cuándo querrías usar uno sobre el otro?
Es sutil, pero la respuesta está en la documentación que proporcionó. Las cookies firmadas solo protegen contra la manipulación, mientras que las cookies cifradas protegen contra la lectura y la manipulación.
Más específicamente, las cookies firmadas llaman a ActiveSupport::MessageVerifier
para agregar un resumen (generado usando secret_key_base
) a la cookie. Si se modifica el valor de la cookie, el resumen ya no coincidirá y, sin conocer el valor de secret_key_base
, la cookie no se podrá firmar. Sin embargo, el valor de la cookie es meramente codificado en base64 y puede ser leído por cualquier persona.
Las cookies cifradas denominadas ActiveSupport::MessageEncryptor
para cifrar realmente el valor de la cookie antes de generar el resumen. De forma similar a las cookies firmadas, si se modifica el valor de la cookie, el resumen ya no coincidirá, pero, además, el valor de la cookie no se puede descifrar sin la base de secret_key_base
.
En cuanto a cuándo utilizaría las cookies cifradas frente a las firmadas, se reduce a la confidencialidad de la información que está almacenando en la cookie. Si todo lo que quiere proteger es que alguien modifique la cookie, luego fírmela, pero si también necesita mantener los datos en secreto, encripte.