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

Mer*_*erc 99 cookies connect node.js express

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

app.use(express.cookieParser('A secret'));
Run Code Online (Sandbox Code Playgroud)

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

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

解析Cookie标头并填充req.cookies 由cookie名称键入的对象.(可选)您可以通过传递一个secret字符串来启用已签名的cookie支持,该字符串req.secret可以被其他中间件使用.

有人知道吗?

芝加哥商业交易所.

sta*_*er2 113

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

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

如果不匹配,则会出错.

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

编辑

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

res.cookie('name', 'value', {signed: true})
Run Code Online (Sandbox Code Playgroud)

要访问已签名的cookie,请使用以下signedCookies对象req:

req.signedCookies['name']
Run Code Online (Sandbox Code Playgroud)

  • 值得一提的是`如果不匹配,则会出错.不是*错误*.只是该键*的request.signedCookie没有设置*.所以更喜欢*忽略* (8认同)
  • 它是:`(res.cookie(name,value,{signed:true}))`.报告文档中缺少的"细节"...... (6认同)
  • 劫持会话是不同的......即用户B采用用户A的身份.签名的cookie只是验证用户未更改cookie内容的一种方式,因此内容可以信任. (5认同)

小智 24

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


And*_*man 11

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

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

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

  • 这是一个保留的规范链接:https://github.com/tj/node-cookie-signature/blob/60f3be29232145e445aada51d520d370b0a52161/index.js#L16 (3认同)