Que sont les cookies «signés» dans connect / expressjs?

J’essaie de comprendre ce que sont réellement les “cookies signés”. Il n’y a pas grand chose sur le net, et si j’essaie ça:

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

Mais quand même… Les cookies sont toujours 100% normaux sur le navigateur, et je ne sais pas vraiment ce qu’est «signé» (j’étais en quelque sorte en train de «voir» quelque chose d’étrange sur le client, quelque chose comme les données cryptées en utilisant “Un secret” comme du sel?)

La documentation dit ( https://github.com/expressjs/cookie-parser ):

req.cookies tête du cookie et req.cookies avec un object req.cookies par les noms des cookies. Vous pouvez éventuellement activer la prise en charge des cookies signés en transmettant une chaîne secret , qui assigne req.secret afin qu’il puisse être utilisé par d’autres logiciels req.secret .

Est-ce que quelqu’un sait?

Merc.

Le cookie sera toujours visible, mais il a une signature, donc il peut détecter si le client a modifié le cookie.

Cela fonctionne en créant un HMAC de la valeur (cookie actuel), et base64 l’a encodé. Lorsque le cookie est lu, il recalcule la signature et s’assure qu’il correspond à la signature qui lui est attachée.

Si cela ne correspond pas, cela donnera une erreur.

Si vous souhaitez également masquer le contenu du cookie, vous devez le crypter (ou simplement le stocker dans la session côté serveur). Je ne suis pas sûr s’il existe déjà un middleware pour cela.

modifier

Et pour créer un cookie signé que vous utiliseriez

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

Et pour accéder à un cookie signé, utilisez l’object signedCookies de req :

 req.signedCookies['name'] 

Comme le mentionne emostar, il s’agit simplement de s’assurer qu’une valeur n’a pas été altérée. Il est placé dans un object différent (req.signedCookies) pour différencier les deux, permettant au développeur de montrer son intention. Si elles étaient stockées dans les reci.cookies avec les autres, quelqu’un pourrait simplement créer un cookie non signé du même nom, ce qui irait à l’encontre de leur objective.

Je cherchais plutôt une bonne réponse à cette question… Et en regardant le code source de cookie-signature de cookie-signature , qui est utilisé par cookie-parser pour signer les cookies signés, j’ai mieux compris ce qu’est un cookie signé. .

val est bien sûr la valeur du cookie et secret est la chaîne que vous ajoutez comme option à cookie-parser

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