J'essaie de comprendre ce que sont les "cookies signés". Il n'y a pas grand chose sur le net, et si j'essaye ceci:
app.use(express.cookieParser('A secret'));
Mais quand même ... Les cookies sont toujours normaux sur le navigateur, et je ne sais pas vraiment ce qui est "signé" (j'espérais en quelque sorte "voir" quelque chose de bizarre sur le client, comme les données chiffrées à l'aide de "Un secret" comme du sel?)
La documentation indique ( https://github.com/expressjs/cookie-parser ):
Parse Cookie en-tête et peupler
req.cookies
avec un objet associé aux noms de cookie. Vous pouvez éventuellement activer la prise en charge des cookies signés en transmettant une chaînesecret
, qui assignereq.secret
il peut donc être utilisé par d’autres middlewares.
Est-ce que quelqu'un sait?
Merc.
Le cookie sera toujours visible, mais sa signature permettra de détecter si le client a modifié le cookie.
Cela fonctionne en créant un HMAC de la valeur (cookie actuel) et en le codant en base64. 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, il y aura une erreur.
Si vous souhaitez également masquer le contenu du cookie, vous devez plutôt le chiffrer (ou simplement le stocker dans la session côté serveur). Je ne sais pas s'il existe déjà un middleware pour cela.
Éditer
Et pour créer un cookie signé, vous utiliseriez
res.cookie('name', 'value', {signed: true})
Et pour accéder à un cookie signé, utilisez l'objet signedCookies
de req
:
req.signedCookies['name']
Yup comme emostar mentionne qu'il s'agit simplement de s'assurer qu'une valeur n'a pas été falsifiée. Il est placé dans un objet différent (req.signedCookies) pour différencier les deux, ce qui permet au développeur de montrer l'intention. S'ils étaient stockés dans des cookies de demande avec les autres, quelqu'un pourrait simplement créer un cookie non signé du même nom, ce qui irait à l'encontre de leur objectif.
J'ai cherché assez longuement pour une bonne réponse à cela ... Et en regardant le code source de cookie-signature
, qui est utilisé par cookie-parser
signer les cookies signés m'a permis de mieux comprendre 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
J'ai utilisé la version 1.4.4 de cookie-parser.
Je pourrais ajouter des cookies signés et des cookies signés cryptés dans le navigateur. Si j'essaie de modifier les cookies signés à l'aide de editThisCookie (plug-in chrome), l'analyseur de cookie détecte les modifications externes, puis définit false comme valeur.
response.cookie('userId',401,{signed: true})
En-tête de réponse dans le navigateur, apparaître comme
Set-Cookie: empId=s%3A101.US2oSV4TSvfkvvEQ5fj1sXsjj8rNxx2ph4VdHNTuKX8; Path=/
Obtenir un cookie signé
request.signedCookies
https://Gist.github.com/dineshbalaji/607d166f0240f932a5cb02099b0ece4c