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

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

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

但仍然…在浏览器中Cookie仍然是100%正常的,我不知道这里有什么“签名”(我有点希望在客户端看到一些奇怪的东西,比如使用encryption的数据作为盐的“秘密”?)

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

parsingCookie标题,并使用由Cookie名称键入的对象填充req.cookies 。 或者,您可以通过传递一个secretstring来启用签名cookie支持,该string指定req.secret以便其他中间件可以使用该string。

有人知道吗?

芝加哥商业交易所。

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

它通过创build一个值(当前cookie)的HMAC,并使用base64对其进行编码。 当cookie被读取时,它会重新计算签名并确保它与附加的签名匹配。

如果不匹配,则会出现错误。

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

编辑

并创build一个签名的cookie,你会使用

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

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

 req.signedCookies['name'] 

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

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

val当然是cookie的值, secret是你作为cookie-parser选项添加的string

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