我试图找出实际上是什么“签名的cookie”。网上没有多少,如果我试试这个:
app.use(express.cookieParser('A secret'));
但是仍然......浏览器上的Cookie仍然100%正常,我真的不知道“签名”在这里是什么(我有点希望“看到”客户端上的一些奇怪之处,就像使用加密的数据一样作为盐的“秘密”?)
文件说(https://github.com/expressjs/cookie-parser):
解析Cookie标头并使用由cookie名称键入的对象填充
req.cookies
。您可以选择通过传递secret
字符串来启用签名cookie支持,该字符串分配req.secret
,以便其他中间件可以使用它。
有人知道吗?
芝加哥商业交易所。
cookie仍然可见,但它有一个签名,因此它可以检测客户端是否修改了cookie。
它的工作原理是创建值的HMAC(当前cookie),并对其进行base64编码。当cookie被读取时,它会重新计算签名并确保它与附加的签名相匹配。
如果不匹配,则会出错。
如果你想隐藏cookie的内容,你应该加密它(或者只是将它存储在服务器端会话中)。我不确定那里是否有中间件。
编辑
并创建一个您将使用的签名cookie
res.cookie('name', 'value', {signed: true})
要访问已签名的cookie,请使用signedCookies
的req
对象:
req.signedCookies['name']
和emostar一样,Yup提到它只是为了确保价值没有被篡改。它放在一个不同的对象(req.signedCookies)中,以区分两者,允许开发人员显示意图。如果它们与其他人一起存储在req.cookies中,则可以简单地制作一个同名的未签名cookie,从而击败它们的全部目的。
我一直在寻找相当广泛的答案...并且查看cookie-signature
的源代码,cookie-parser
用来签署已签名的cookie,这让我更好地理解了签名的cookie是什么。
val
当然是cookie的值,而secret
是你添加的字符串作为cookie-parser
的选项
https://github.com/visionmedia/node-cookie-signature/blob/master/index.js#L16
我使用了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