简介
Cookies是一个Node.js模块,用于获取和设置Http(s)cookie,可以使用Keygrip对Cookie进行签名以防止篡改。它可以与内置的node.js HTTP库一起使用,也可以作为Connect / Express/Koa 中间件使用。
Cookie 防篡改
Cookie防篡改是通过签名实现的,我们在使用Koa/egg等Nodejs框架时候需要配置这样的选项keygrip 进行加密。
app.keys = ['xxx'];
比如我们设置一个加密的cookie
ctx.cookies.set(
'cid',
'hello world',
{
domain: 'localhost', // 写cookie所在的域名
path: '/', // 写cookie所在的路径
maxAge: 10 * 60 * 1000, // cookie有效时长
expires: new Date('2019-06-15'), // cookie失效时间
httpOnly: true, // 是否只用于http请求中获取
overwrite: false, // 是否允许重写
signed: true,
}
)
获取加密的cookie
ctx.cookies.get('cid', { signed: true })
在Cookies模块中,如果有signed签名参数。每次get都会都会进行解密处理。可以认为我们将公钥放在cookie中格式为 cookieName.${sig}
私钥保存在服务端。这样我们每次获取公钥使用私钥进行解密,如果发现解密出的结果和获取的cookie值不一致,则认为是被篡改了