学习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设置签名?
什么场景下又不需要设置签名?
希望有前辈指点一下,不胜感激
设置
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
,什么时候不用,看你的安全性的要求了。