读了一下 cookie-parser 这个插件,不是很领会

2014-12-29 11:02:16 +08:00
 coolicer
req.cookies = cookie.parse(cookies, options);

// parse signed cookies
if (secret) {
req.signedCookies = parse.signedCookies(req.cookies, secret);
req.signedCookies = parse.JSONCookies(req.signedCookies);
}

// parse JSON cookies
req.cookies = parse.JSONCookies(req.cookies);

基本这几句就是核心了,看一次源码 req.signedCookies基本上就是一个空的对象{}。为什么我项目中,却是可以取的。反而req.cookies 是空的。
4409 次点击
所在节点    Node.js
5 条回复
coolicer
2014-12-29 11:24:22 +08:00
结合例子,似乎懂了。登录后,cookie就是加密过的,然后回传解密,这时存到req.signedCookies。只是没有看到,在哪一步用了sign去加密。
luikore
2014-12-29 11:45:15 +08:00
少年, 你需要分清楚 加密, 摘要 和签名 的区别
coolicer
2014-12-29 11:53:33 +08:00
@luikore 不懂,半吊子。它的方法名字是sign,应该叫签名吧。望能请教二一
luikore
2014-12-29 14:38:39 +08:00
leonlu
2014-12-30 11:45:42 +08:00
在服务器接受一个cookie的时候, 有个工作就是要鉴定这个cookie是不是合法的. 因为不怀好意者可以尝试伪造cookie. 所以cookie要有一个防伪. 这里用到的方法叫数字摘要.

假设cookie值是tom, 数字摘要的工作过程是这样的:

生成cookie

1. 设定一个密码, 假设是cat
2. 把cookie值和密码用|连接起来, 即tom|cat, 然后用摘要算法(例如sha1)生成签名, 假设签名为xyz(一般是base64的编码).
3. 最终发送cookie也是两个部分, 内容|签名, 即: tom|xyz

验证cookie

1. 将接收到的cookie值tom|xyz拆分成tom和xyz
2. 将cookie值与密码用|连接起来, 即tom|cat, 然后用同样的摘要算法生成签名, xyz
3. 对比上边拆分xyz和加密结果是否一致, 如果一致, 那么认为这个cookie合法.

一般来讲, 我们认为hash算法是单向的, 也就是不能从签名反向计算出来原文tom|cat. 这也就保证了我们的签名是安全的.

如果cookie的内容可能也比较敏感, 比如uid=1. 可以做一次加密. 这就要求能把原文1从密文中解出来. 可以用一下诸如aes等对称加密算法. 由于这个内容在客户上不用解密, 加密密钥也就不需要传输, 因此也是安全的.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/157506

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX