connect / expressjs中的“签名”cookie是什么?

问题描述 投票:91回答:4

我试图找出实际上是什么“签名的cookie”。网上没有多少,如果我试试这个:

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

但是仍然......浏览器上的Cookie仍然100%正常,我真的不知道“签名”在这里是什么(我有点希望“看到”客户端上的一些奇怪之处,就像使用加密的数据一样作为盐的“秘密”?)

文件说(https://github.com/expressjs/cookie-parser):

解析Cookie标头并使用由cookie名称键入的对象填充req.cookies。您可以选择通过传递secret字符串来启用签名cookie支持,该字符串分配req.secret,以便其他中间件可以使用它。

有人知道吗?

芝加哥商业交易所。

node.js cookies express connect
4个回答
110
投票

cookie仍然可见,但它有一个签名,因此它可以检测客户端是否修改了cookie。

它的工作原理是创建值的HMAC(当前cookie),并对其进行base64编码。当cookie被读取时,它会重新计算签名并确保它与附加的签名相匹配。

如果不匹配,则会出错。

如果你想隐藏cookie的内容,你应该加密它(或者只是将它存储在服务器端会话中)。我不确定那里是否有中间件。

编辑

并创建一个您将使用的签名cookie

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

要访问已签名的cookie,请使用signedCookiesreq对象:

req.signedCookies['name']

23
投票

和emostar一样,Yup提到它只是为了确保价值没有被篡改。它放在一个不同的对象(r​​eq.signedCookies)中,以区分两者,允许开发人员显示意图。如果它们与其他人一起存储在req.cookies中,则可以简单地制作一个同名的未签名cookie,从而击败它们的全部目的。


11
投票

我一直在寻找相当广泛的答案...并且查看cookie-signature的源代码,cookie-parser用来签署已签名的cookie,这让我更好地理解了签名的cookie是什么。

val当然是cookie的值,而secret是你添加的字符串作为cookie-parser的选项

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


0
投票

我使用了cookie-parser 1.4.4版本。

我可以在浏览器中添加已签名的cookie和已签名的cookie,如果我尝试使用editThisCookie(chrome插件)编辑已签名的cookie,则cookie-parser会检测外部更改,然后将false设置为值。

response.cookie('userId',401,{signed: true})

浏览器中的响应标头显示为

Set-Cookie: empId=s%3A101.US2oSV4TSvfkvvEQ5fj1sXsjj8rNxx2ph4VdHNTuKX8; Path=/

获取签名cookie

request.signedCookies

https://gist.github.com/dineshbalaji/607d166f0240f932a5cb02099b0ece4c

© www.soinside.com 2019 - 2024. All rights reserved.