cookies 的安全问题
cookies 的特点
- 前端数据存储
- 后端通过 http 头设置
- 请求时通过 http 头传给后端
- 前端可读写
- 遵守同源策略(在同一个源里请求都会带上 cookie)
- 域名(指定域名下才能使用 cookie)
- 有效期(cookie 在一段时间有效,可以让有效期设置成过去的时间,可以删除 cookie)
- 路径(指定路径使用 cookie)
- http-only (只在http请求的接收和发送中才能使用)
- secure(只能在 https 中请求才能使用 cookie)
- same-site 第三方网站不能使用 cookie
cookies 的作用
存储个性化设置
存储未登录时用户唯一标识
- 前端提交用户名和密码
- 后端验证用户名和密码
- 后端通过 http 头设置用户凭证
- 存用户 id
cookie 会在前端被非法篡改
- 用户 id+签名
同时设定 id 和签名,后续访问的时候,签名只会在后台知道,签名不可更改,就算前端改了 id,也为非法用户
- sessionId
是一个随机的字符串,相当于一把钥匙,后端根据这个钥匙,找到用户信息,然后再验证身份,前端不会存用户信息。将用户的数据放在内存中,通过给前端发送一个随机字符串,前端不存任何数据,再次请求带上这个标识,就能够在内存中把之前的数据找出来,当后端程序重启,session 会丢失,为了解决这个问题,把 session 存在数据库中,要实现 session 持久化,把 session 放在外部存储中,比如数据库或者 redis 中,就解决了分布式 session 可能不同步的问题。
- 存用户 id
- 后续访问时后端先验证用户凭证
存储已登录用户的凭证
存储其他业务数据
cookies 和 xss 的关系
- xss 可能偷取 cookie,document.cookie 可以偷取 cookie,拿到用户登录态,做非法入侵
- http-only 的 cookie 不会被偷
cookies 和 csrf 的关系
- csrs 利用了用户的 cookie,b 网站向 a 网站发起请求,带上 b 网站的 cookie,但是 b 网站因为没访问 a 网站的前端,所以无法读取 cookie,使用 same-site 阻止第三方网站使用 cookie
cookies 的安全策略
- 签名防止篡改,
加一个签名,虽然 userid 在前端存储,但是有签名的存在,用户无法随意修改,数据仍然是明文的,但有一个验证数据有没有更改的过程
- 加密
把 userid 加密,只有加秘方才能知道加密的信息是什么
- http-only
防止 xss
- secure
只在 https 中使用 cookie
- same-site
访问 csrf 攻击

确认评论邮箱
邀请制评论