NodeJS中的signedcookies和unsignedcookies之间的确切区别是什么?

dem*_*ers 0 cookies node.js

大家好,我是 Nodejs 的初学者。我尝试过Express 中的cookie 解析器模块。他们正在使用 {signed:true} 设置签名 cookie。

首先澄清一下我。

1.为什么要使用签名cookie?和

2.签名cookie有什么用

我已经检查了解决方案,但没有人说它有什么用?

我在程序中分别尝试了这两种情况,并且在不使用密钥和签名 cookie 的情况下没有收到任何错误:

任何帮助将不胜感激 提前致谢...

节点代码:

  1. 使用带密钥的签名 cookie

app.use(cookieparser("Youcansetanydataasasecret"));
const options={
    maxAge:1000*60*5,
    httpOnly:true,
    signed:true
};
app.get('/setcookie',(req,res)=>{
    res.cookie('cookieone','This is my first cookie',options);
    res.send(`Cookie has been set...`);
});
app.get('/readcookie',(req,res)=>{
    console.log(req.signedCookies['cookieone']);
    res.send(req.signedCookies['cookieone']);
});
Run Code Online (Sandbox Code Playgroud)

  1. 不使用签名的cookie和秘密。

app.use(cookieparser());
const options={
    maxAge:1000*60*5,
    httpOnly:true,
};
app.get('/setcookie',(req,res)=>{
    res.cookie('cookietwo','cookie may different',options);
    res.send(`Cookie has been set...`);
});
app.get('/readcookie',(req,res)=>{
    console.log(req.cookies)
    res.send(req.cookies.cookietwo);
});
Run Code Online (Sandbox Code Playgroud)

ott*_*ter 5

服务器将 cookie 发送到客户端后,客户端可能会修改 cookie,然后在将来的请求中将其发送回服务器。有时这是无害的,有时它可能是应用程序所要求的,但有时重要的是客户端发送的 cookie 与其原始服务器定义的值保持不变。(想象一个包含用户名、银行帐号、金额或游戏分数的 cookie。篡改这些内容可能会破坏服务器安全或允许某种盗窃或作弊行为。)

如果服务器需要能够检测客户端是否未更改 cookie,则服务器可以将签名以及需要保护的实际 cookie 数据包含在 cookie 中。签名源自 cookie 数据和只有服务器知道的秘密。该秘密使得修改数据的客户端很难生成正确的签名来处理修改后的数据。具有这种签名的 cookie 被 cookie 解析器模块称为签名 cookie

当签名的 cookie 被发送回服务器时,服务器可以验证签名和 cookie 中的数据是否相互匹配。如果它们匹配,则服务器可以确信数据是真实的。如果它们不匹配,则服务器知道 cookie 已被客户端修改,并且服务器可以拒绝该请求。

因此,如果您想确保 cookie 中返回的数据未被客户端修改,您可以使用签名 cookie。如果 cookie 中的数据没有价值,并且您不关心它是否被客户端修改,或者您已安排使用某种替代机制来验证 cookie 的内容,那么您不需要使用签名的 cookie。

请注意,仅签署 cookie 并不能防御客户端可能尝试欺骗服务器的所有方式。特别是,签名不能防御重放攻击。另请注意,服务器向客户端发送敏感数据根本不是一个好主意。我给出的将银行帐号放入 cookie 的示例只是为了说明这个概念。这不是真正的 Web 应用程序应该做的事情。