cookie什么场景下需要签名?

学习koa2的过程中,发现cookie设置有一个选项。

ctx.cookies.set('name', 'frank', { signed: true ,maxAge:7200000});

官网给出的解释是:sign the cookie value,应该可以理解成为cookie设置签名的意思。
生成的cookie如下所示:

生成age cookie的同时,也生成一个age.sig cookie,不是很理解,按照官网的意思,这是为cookie设置了一个签名。

产生2个疑问:
什么场景下需要为cookie设置签名?
什么场景下又不需要设置签名?

希望有前辈指点一下,不胜感激

阅读 3.8k
评论
    4 个回答

    设置signed cookie,考虑的因素无非是安全性问题

    我们知道,发送 HTTP 请求,除了浏览器,还有各种代理。
    即使设置了httpOnly,这一限制只对浏览器有效,我们同样可以把cookie拿过来更改,利用其他工具发送请求。

    设置signed cookie后,signed cookie的生成和校验都是在服务器端处理,对客户端不可见,因此,也就达到防止篡改cookie的目的。

    这样就安全了吗?再考虑这样一个问题,cookie是明文传输的,包括signed cookie,如果cookie的值是固定的,生成的signed cookie就是一致的,下次请求时,把这个signed cookie带上,就可以请求此cookie对应的数据了。所以,最安全的做法:还是cookie中不放敏感数据。

    Koa2 中,cookie功能使用这个模块:cookie ,这个模块使用:keygrip 做数据的签名和验证。

    至于什么时候使用signed cookie,什么时候不用,看你的安全性的要求了。

      通俗来说:当你需要访问者A下次来访问你的网站是你还可以认出他是访问者A的时候你就可以使用cookie。

        sign the cookie value 不是“给 cookie 赋值”的意思么……

          • 295

          先记住一句话:cookie sign是为了防止用户篡改cookies的值。
          设置sign=true,不但会生成一个key:value,还会生成一个key.sig:djaljdeuishjkfhsdjkhfsdfjkdhsdjkhfkj;类似这样的东西。
          当用户想自己修改key对应的value,目的可能是查看自己没有权限的内容,那么后面哪个key.sign的值他是没办法改的,因为是服务器通过密钥签名过的,对应的是key的value,如果篡改了value,那么服务器会知道请求携带的cookie跟我的签名key.sig不一致,就不会返回相应的内容。

            撰写回答

            登录后参与交流、获取后续更新提醒

            相似问题
            推荐文章