Node实战篇:Express 中间件 cookie-parser(六)

第一部分 cookie

首先了解一下会话

Cookie是由网景公司的前雇员Lou Montulli在1993年发明的,在RFC2109(已废弃,被RFC2965取代)里初次被描述的,每个客户端最多保持三百个cookie,每个域名下最多20个Cookie(实际上一般浏览器现在都比这个多,如Firefox是50个),而每个cookie的大小为最多4K,不过不同的浏览器都有各自的实现。对于cookie的使用,最重要的就是要控制cookie的大小,不要放入无用的信息,也不要放入过多信息。

1.1 cookie概述

HTTP 是一个无状态协议,所以客户端每次发出请求时,下一次请求无法得知上一次请求所包含的状态数据;

Cookie是解决HTTP无状态性的有效手段,服务器可以设置或读取Cookie中所包含的信息。

简单的说,cookie是服务器发给用户的一个标识,用来帮助服务器识别用户,从而记录用户状态。

cookie 其他参数option:

1.2 Cookie分类

1.3 Cookie 的安全隐患

Cookie提供了一种手段使得HTTP请求可以附加当前状态, 现今的网站也是靠Cookie来标识用户的登录状态的:

用户提交用户名和密码的表单,这通常是一个POST HTTP请求。

服务器验证用户名与密码,如果合法则返回200(OK)并设置Set-Cookie为authed=true。

浏览器存储该Cookie。

浏览器发送请求时,设置Cookie字段为authed=true。

服务器收到第二次请求,从Cookie字段得知该用户已经登录。 按照已登录用户的权限来处理此次请求。

这里面的问题在哪里?

假如我们直接设置Cookie字段为authed=true并发送该HTTP请求, 服务器岂不是被欺骗了?这种攻击非常容易,

1.4 Cookie 防篡改机制

服务器可以为每个Cookie项生成签名,由于用户篡改Cookie后无法生成对应的签名, 服务器便可以得知用户对Cookie进行了篡改。

第二部分: cookie-parser

实例代码(不签名形式):

chrome中cookie显示为name=value

2.2 cookie-parser API

cookie-Parser和 express-session 这两个中间件在express 4版本之后解耦了,最开始如果用express-session 的话一定也要用cookieParser,

中间件包含三个模块: ;

其中,cookie cookie-signature这两个模块是private的。所有的public API都在cookie-Parser中。

cookie-Parser 有四个接口;

2.2.1 cookieParser(secret, options) 返回的是一个中间件函数

2.2.2 cookieParser.JSONCookie(str)

将cookie作为json格式解析, 如果是json格式的value,就返回, 否则返回过去式;

2.2.3 cookieParser.JSONCookies(cookies)

给定一个对象,会重复调用cookieParser.JSONCookie

2.2.4 cookieParser.signedCookie(str, secret)

解析签名cookie,

2.2.5 cookieParser.signedCookies(cookies, secret)

给定一个对象, 重复调用cookieParser.signedCookie(str, secret)

实例代码(签名):

chrome中cookie显示为bwf=s%3......... 签名前是bwf=hhw

关注我们

如果需要源码可以关注“IT实战联盟”公众号并留言(源码名称+邮箱),小萌看到后会联系作者发送到邮箱,也可以加入交流群和作者互撩哦~~~!

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180402G1A8I500?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券