Necesito almacenar una pequeña porción de datos (menos de 10 caracteres) en una cookie en Rails y necesito que sea segura. No quiero que nadie pueda leer ese dato o inyectar su propia información (ya que eso abriría la aplicación a muchos tipos de ataques). Creo que el encriptado del contenido de la cookie es el camino a seguir (¿debería firmarlo también?). ¿Cuál es la mejor manera de hacerlo?Almacenamiento de una cookie cifrada con Rails
En este momento estoy haciendo esto, que parece seguro, pero muchas cosas parecían seguras para las personas que sabían mucho más que yo sobre seguridad y luego se descubrió que no era realmente seguro.
estoy ahorrando el secreto de esta manera:
encryptor = ActiveSupport::MessageEncryptor.new(Example::Application.config.secret_token)
cookies[:secret] = {
:value => encryptor.encrypt(secret),
:domain => "example.com",
:secure => !(Rails.env.test? || Rails.env.development?)
}
y luego lo estoy leyendo la siguiente manera:
encryptor = ActiveSupport::MessageEncryptor.new(Example::Application.config.secret_token)
secret = encryptor.decrypt(cookies[:secret])
¿Eso es seguro? ¿Alguna mejor forma de hacerlo?
actualización: lo que sé de la sesión de Rails y cómo es seguro, tanto mediante la firma de la cookie y opcionalmente mediante el almacenamiento de los contenidos del lado del servidor sesión y hacer uso de la sesión por lo que es para. Pero mi pregunta aquí es sobre el almacenamiento de una cookie, una información que no quiero en la sesión, pero aún necesito que sea segura.
Fuera de interés, ¿por qué necesita almacenarse en una cookie en lugar de en el lado del servidor, donde sería por definición más segura? – Russell
@russell bien, necesitas guardar algo en el navegador, ¿verdad? de lo contrario, no podría identificarlo nuevamente. Ya se trate de los datos reales o una identificación de un registro en una tabla, es una cuestión de preferencia y necesidad con respecto al tamaño de los datos y otras consideraciones. Lo que estoy almacenando ya es la identificación de un registro en la tabla. Podría crear otra tabla, pero parece una pérdida en este caso. – Pablo
Agregué una respuesta porque creo que cambiar el almacén de sesión predeterminado para utilizar el DB le dará la seguridad que desea con muy poca sobrecarga en lo que respecta a la creación de tablas, etc. – Russell