V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
coolicer
V2EX  ›  Node.js

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

  •  
  •   coolicer · 2014-12-29 11:02:16 +08:00 · 4413 次点击
    这是一个创建于 3621 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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 是空的。
    第 1 条附言  ·  2014-12-29 14:09:31 +08:00
    已解决
    5 条回复    2014-12-30 11:45:42 +08:00
    coolicer
        1
    coolicer  
    OP
       2014-12-29 11:24:22 +08:00
    结合例子,似乎懂了。登录后,cookie就是加密过的,然后回传解密,这时存到req.signedCookies。只是没有看到,在哪一步用了sign去加密。
    luikore
        2
    luikore  
       2014-12-29 11:45:15 +08:00
    少年, 你需要分清楚 加密, 摘要 和签名 的区别
    coolicer
        3
    coolicer  
    OP
       2014-12-29 11:53:33 +08:00
    @luikore 不懂,半吊子。它的方法名字是sign,应该叫签名吧。望能请教二一
    luikore
        4
    luikore  
       2014-12-29 14:38:39 +08:00
    leonlu
        5
    leonlu  
       2014-12-30 11:45:42 +08:00   ❤️ 2
    在服务器接受一个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等对称加密算法. 由于这个内容在客户上不用解密, 加密密钥也就不需要传输, 因此也是安全的.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1136 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 18:58 · PVG 02:58 · LAX 10:58 · JFK 13:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.