Node.js 什么是「;署名;connect/expressjs中的Cookie?
我想弄清楚“签名饼干”到底是什么。 网上的东西不多,如果我尝试一下:Node.js 什么是「;署名;connect/expressjs中的Cookie?,node.js,cookies,express,connect,Node.js,Cookies,Express,Connect,我想弄清楚“签名饼干”到底是什么。 网上的东西不多,如果我尝试一下: app.use(express.cookieParser('A secret')); 但还是。。。Cookie在浏览器上仍然是100%正常的,我真的不知道这里的“签名”是什么(我有点希望在客户端上“看到”一些奇怪的东西,比如使用“秘密”作为salt加密的数据?) 文档中说(): 解析Cookie头并填充req.cookies 使用由cookie名称键入的对象。选择性地 您可以通过以下方式启用签名cookie支持: 一个sec
app.use(express.cookieParser('A secret'));
但还是。。。Cookie在浏览器上仍然是100%正常的,我真的不知道这里的“签名”是什么(我有点希望在客户端上“看到”一些奇怪的东西,比如使用“秘密”作为salt加密的数据?)
文档中说():
解析Cookie头并填充req.cookies
使用由cookie名称键入的对象。选择性地
您可以通过以下方式启用签名cookie支持:
一个secret
字符串,用于分配req.secret
so
它可以被其他中间件使用
有人知道吗
Merc.cookie仍然可见,但它有一个签名,因此它可以检测客户端是否修改了cookie 它通过创建值(当前cookie)的HMAC并对其进行base64编码来工作。当cookie被读取时,它会重新计算签名并确保它与附加到它的签名匹配 如果它不匹配,那么它将给出一个错误 如果您还想隐藏cookie的内容,则应该对其进行加密(或者只将其存储在服务器端会话中)。我不确定是否有中间件已经存在 编辑 要创建签名cookie,您将使用
res.cookie('name', 'value', {signed: true})
要访问签名cookie,请使用req
的signedCookies
对象:
req.signedCookies['name']
是的,就像emostar提到的,这只是为了确保一个值没有被篡改。它被放置在不同的对象(req.signedCookies)中,以区分两者,从而允许开发人员显示意图。如果它们与其他cookies一起存储在req.cookies中,有人可以简单地制作一个同名的未签名cookie,这就破坏了它们的全部用途。我一直在广泛地搜索一个很好的答案。。。 通过查看
cookie签名
的源代码,cookie解析器
使用该源代码对签名cookie进行签名,我对签名cookie有了更好的理解
val
当然是cookie的值,secret
是作为选项添加到cookie解析器的字符串
我使用了cookie parser 1.4.4版本 我可以在浏览器中添加签名cookie和加密的签名cookie,若我尝试使用editThisCookie(chrome插件)编辑签名cookie,则cookie解析器检测外部更改,然后将false设置为值
response.cookie('userId',401,{signed: true})
浏览器中的响应标题,显示为
Set-Cookie: empId=s%3A101.US2oSV4TSvfkvvEQ5fj1sXsjj8rNxx2ph4VdHNTuKX8; Path=/
签名饼干
request.signedCookies
谢谢!但是我现在没有看到饼干上的签名。也就是说,在客户端中,cookie没有签名。除了在
express.cookieParser()
中包含秘密消息之外,我还需要做些什么来启用cookie签名吗?请稍候。。。我正在用res.cookie('somethingelsagainandagain','signed?Maybe')设置cookie代码>但是。。。我怀疑那是在签字!cookieParser()中间件已准备好解析签名cookie,但我肯定没有正确地进行设置。。。我必须手动签名吗…?它是:(res.cookie(名称,值,{signed:true}))
。报告文档中缺失的“细节”…劫持会话是另一回事。。。即用户B使用用户A的身份。签名cookie只是验证用户未更改cookie内容的一种方法,因此可以信任cookie内容。值得一提的是如果不匹配,则会给出错误。
不是错误。未设置该密钥的request.signedCookie。所以更像是Ignoredher保留了一个规范链接:阅读代码确实是一个更好的解释。谢谢应该注意的是,如果cookie值(即会话id)的熵已经很高,并且与签名本身的熵(HMAC SHA256的情况下为256位)相当,则对cookie进行签名并不是绝对必要的。这是很好的解释和解释。