Node.js nodejs中的sessionsecret和签名cookie的作用相同吗?
在express中,您的设置会话有点像这样:Node.js nodejs中的sessionsecret和签名cookie的作用相同吗?,node.js,express,cookies,Node.js,Express,Cookies,在express中,您的设置会话有点像这样: app.use(express.session({ store: store({...}), secret: 'topsecret' })); 在阅读secret的功能时, 我发现:通过检查指纹来防止会话劫持 这听起来很像签名cookie:确保值未被篡改。它被放置在不同的对象(req.signedCookies)中以区分这两个对象 两者之间有区别吗 我了解签名cookie,哈希是用cookie值+secret创建的,并与cookie中的值一
app.use(express.session({
store: store({...}),
secret: 'topsecret'
}));
在阅读secret
的功能时,
我发现:通过检查指纹来防止会话劫持
这听起来很像签名cookie:确保值未被篡改。它被放置在不同的对象(req.signedCookies)中以区分这两个对象
两者之间有区别吗
我了解签名cookie,哈希是用cookie值+secret创建的,并与cookie中的值一起保存。这样,您就可以知道cookie值是否被篡改。如果您是正确的,则该秘密用于对cookie进行签名,以便它不会被篡改。您可以查看有关express会话如何序列化cookie的:
function setcookie(res, name, val, secret, options) {
var signed = 's:' + signature.sign(val, secret);
var data = cookie.serialize(name, signed, options);
debug('set-cookie %s', data);
var prev = res.getHeader('set-cookie') || [];
var header = Array.isArray(prev) ? prev.concat(data) : [prev, data];
res.setHeader('set-cookie', header)
}
基本上是使用SHA-256
对其进行签名,这将生成一个32字节的散列
还有一个unsigncookie
,用于验证您的cookie是否未被篡改。显然,它会根据上面用于签名的相同秘密进行验证:
function unsigncookie(val, secrets) {
for (var i = 0; i < secrets.length; i++) {
var result = signature.unsign(val, secrets[i]);
if (result !== false) {
return result;
}
}
return false;
}
函数(val,secrets){
对于(变量i=0;i
我也发现了这一点:会话数据并没有保存在cookie中,但是使用了cookie,所以我们必须使用cookieParser()……秘密会话cookie用这个秘密签名以防止篡改
啊,是的-在这种情况下,我总是发现在源代码中钻取数据更容易……对于我来说,查看大量代码让我感到=@,让某人明确地用语言表达是一种安慰。