Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 什么是「;署名;connect/expressjs中的Cookie?_Node.js_Cookies_Express_Connect - Fatal编程技术网

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进行签名并不是绝对必要的。这是很好的解释和解释。