Cookies
zKing 2018-11-26 Web 安全
# 简单认识下
- cookies 是前端数据存储
- 后端通过 http 头设置
- 请求时通过 http 头传给后端
- 前端可读写
- 遵守同源策略
# 特性
- 域名
- 有效期
- 路径/作用域
- http-only
- secure
- same-site
# 作用
- 存储个性化设置
- 存储未登录时用户唯一标识
- 存储已登录用户的凭证
- 存储其他业务数据
# 步骤
- 前端提交用户名和密码
- 后端验证用户名和密码
- 后端通过http头设置用户凭证
- 后续访问时后端先验证用户凭证
# 用户凭证
- 可以用 用户id+签名 来制作
- node.js 自带 crypto 模块,主要用来做加密和签名的。
- 使用 SessionId 来制作
- SessionId其实就是一个随机字符串
const crypto = require('crypto'); //crypto 已经是 node.js 的内置模块了
module.exports = {
md5: (str) => {
return crypto.createHash('md5').update(str).digest('hex');
}
}
# 和 XSS 的关系
- XSS 可能偷取 cookies
- http-only 的 cookie 不会被偷
# 和 CSRF 的关系
- CSRF 利用了用户 Cookies
- 攻击站点无法读写 Cookies
- 最好能阻止第三方使用 cookies ,使用 same-site 属性
# 安全策略
- 签名防篡改
- 私有变换(加密)
- http-only 防止 XSS
- secure 只在 https 上只使用 cookies
- same-site 属性 防止CSRF
# 总结防御方案
- 在使用 cookies 存储数据的时候,要加密并加盐
- cookies 的属性需要设置
http-only
和same-site
- 有能力的条件下,使用 https 协议