美文网首页
express-session在浏览器中存的connect.si

express-session在浏览器中存的connect.si

作者: adtk | 来源:发表于2018-08-02 14:49 被阅读0次

    以下文章中涉及的算法可能已经更改,但是流程/原理是差不多的
    https://cnodejs.org/topic/55c37de8b98f51142b367aba

    若本次cookie中没有connect.sid,则生成一个 [用secret生成connect.sid]
    1. uid-safe生成一个唯一id,记为sessionid,保证每次不重复;
    2. 把上面的connect.sid制作成 's:' + sessionid + '.' + sessionid.sha256(secret).base64() 的形式,实现在node-cookie-signature的sign函数;
    3. 把sessionid用set-cookie返回给前端;
    若本次cookie中包含connect.sid,则验证它是否是本服务器生成的 [用secret验证connect.sid]
    1. 取出cookie中的connect.sid,形式是上面的 's:' + sessionid + '.' + sessionid.sha256(secret).base64()
    2. 从connect.sid中截取出sessionid=connect.sid.slice(2, connect.sid.indexOf(’.’));
    3. 用取出的sessionid再算一次 sessionid.sha256(secret).base64() 记为 mac;
    4. 截取connect.sid中’.'后的部分与mac对比;node-cookie-signature的unsign函数(用上次计算的sha256值和这次计算的sha256值进行比较,只要secret一样,结果就一样);
    5. 验证成功的sessionid继续往下走。
    总结

    用secret进行签名保证存在cookie中的connect.sid是本服务器上次生成的。除非知道secret,不然没办法伪造connect.sid中的sessionid,避免知道了sessionid生成算法的人(uid-safe)使用sessionid随便试探来攻击网站。
    解密,算了两次带secret的sha256哈希值,判断两次sha256哈希值是否相等就达到效果了,哈希值没有解密的过程。

    相关文章

      网友评论

          本文标题:express-session在浏览器中存的connect.si

          本文链接:https://www.haomeiwen.com/subject/hezjvftx.html