parser node example cookieparser cookie node.js cookies express connect

node.js - node - ¿Qué son las cookies "firmadas" en connect/expressjs?



npm cookieparser express (3)

He estado buscando bastante para encontrar una buena respuesta a esto ... Y al mirar el código fuente de cookie-signature , que es utilizado por cookie-parser para firmar las cookies firmadas, me ha dado una mejor comprensión de lo que es una cookie firmada .

val es, por supuesto, el valor de la cookie, y el secret es la cadena que se agrega como una opción para cookie-parser

https://github.com/visionmedia/node-cookie-signature/blob/master/index.js#L16

Estoy tratando de descubrir qué son realmente las "cookies firmadas". No hay mucho en la red, y si pruebo esto:

app.use(express.cookieParser(''A secret''));

Pero aun así ... Las cookies siguen siendo 100% normales en el navegador, y realmente no sé qué es lo que "firmó" aquí (estaba esperando "ver" algo de rareza en el cliente, algo así como los datos cifrados usando "Un secreto" como sal?)

La documentación dice ( https://github.com/expressjs/cookie-parser ):

Parse Cookie encabezado y poblar req.cookies con un objeto codificado por los nombres de las cookies. Opcionalmente, puede habilitar el soporte de cookies firmado pasando una cadena secret , que asigna req.secret para que pueda ser utilizada por otro middleware.

¿Alguien sabe?

Merc.


La cookie seguirá siendo visible, pero tiene una firma, por lo que puede detectar si el cliente modificó la cookie.

Funciona creando un HMAC del valor (cookie actual) y base64 lo codifica. Cuando se lee la cookie, vuelve a calcular la firma y se asegura de que coincida con la firma adjunta.

Si no coincide, dará un error.

Si también desea ocultar el contenido de la cookie, debe encriptarlo en su lugar (o simplemente almacenarlo en la sesión del lado del servidor). No estoy seguro de si hay middleware para eso ya o no.

Editar

Y para crear una cookie firmada que usaría

res.cookie(''name'', ''value'', {signed: true})

Y para acceder a una cookie firmada, utilice el objeto de req de cookies de req :

req.signedCookies[''name'']


Sí, como emostar menciona, es simplemente para asegurar que un valor no haya sido manipulado. Se coloca en un objeto diferente (req.signedCookies) para diferenciar entre los dos, permitiendo que el desarrollador muestre la intención. Si estuvieran almacenados en req.cookies junto con los demás, alguien podría simplemente crear una cookie sin firma con el mismo nombre, derrotando todo el propósito de ellos.