variable rails ruby-on-rails cookies session-cookies

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 firmado cookies.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 encriptado cookies.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.