本文主要从Node缓存、安全与鉴权几个方面展开解析,包含几个方面:
- Cookie 定义、设置、生命周期以及安全性
- Node缓存分类和区别
- Node鉴权包含session、cookie、token、jwt等
一、Cookie
HTTP Cookie(通常也叫 Web Cookie 或浏览器 Cookie),是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。通常,它用于告知服务端两个请求是否来自同一浏览器,如保持用户的登录状态。支持无状态的HTTP变为“有状态”
1、Cookie 作用:
1. 会话状态管理
如用户登录状态、购物车、游戏分数或其它需要记录的信息
2. 个性化设置
如用户自定义设置、主题等
3. 浏览器行为跟踪
如跟踪分析用户行为等
当服务器收到 HTTP 请求时,服务器可以在响应头里面添加一个 Set-Cookie 选项。浏览器收到响应后通常会保存下 Cookie,之后对该服务器每一次请求中都通过 Cookie 请求头部将 Cookie 信息发送给服务器。
2、Set-Cookie
服务器使用 Set-Cookie 响应头部向用户代理(一般是浏览器)发送 Cookie 信息。一个简单的 Cookie 可能像这样:
Set-Cookie: <cookie 名>=<cookie 值>
服务器通过该头部告知客户端保存 Cookie 信息
3、Cookie 的生命周期
Cookie 的生命周期包括:
1. 会话期 Cookie
浏览器关闭之后它会被自动删除,也就是说它仅在会话期内有效。会话期 Cookie 不需要指定过期时间(Expires)或者有效期(Max-Age);
2. 持久性 Cookie
生命周期取决于过期时间(Expires)或有效期(Max-Age);
Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT;
4、如何保证Cookie安全性
1. Secure
表示只应通过被 HTTPS 协议加密过的请求发送给服务端;
2. HttpOnly
JavaScript Document.cookie API 无法访问带有 HttpOnly 属性的 cookie;此类 Cookie 仅作用于服务器。例如,持久化服务器端会话的 Cookie 不需要对 JavaScript 可用,而应具有 HttpOnly 属性。
HttpOnly 类型的 Cookie 用于阻止了 JavaScript 对其的访问性而能在一定程度上缓解XSS攻击。
3. SameSite Cookie
允许服务器要求某个 cookie 在跨站请求时不会被发送,从而可以阻止(CSRF)。
SameSite 可以有下面三种值:
- None:浏览器会在同站请求、跨站请求下继续发送 cookies,不区分大小写;
- Strict:浏览器将只在访问相同站点时发送 cookie;
- Lax:与 Strict 类似,但用户从外部站点导航至 URL 时(例如通过链接)除外。 在新版本浏览器中,为默认选项,Same-site cookies 将会为一些跨站子请求保留,如图片加载或者 frames 的调用,但只有当用户从外部站点导航到 URL 时才会发送。如 link 链接;
cookie samesite限制 strict可缓解CSRF攻击
示例:
Set-Cookie