HTTP(二)


HTTP Cookie


1 HTTP Cookie

Cookie是服务器发送到用户浏览器并保存在本地的一小块数据,它会随着http请求和响应在客户端和服务器中传递。通常用作保持用户的登录状态等。
Cookie主要用于以下三个方面:

  • 会话状态管理(用户登录状态,购物车,游戏分数等)
  • 个性化设置(用户自定义设置,主题等)
  • 浏览器行为跟踪(跟踪分析用户行为等)

由于每次请求都会携带 Cookie数据,所有会带来额外的性能开销


2 创建 Cookie

当服务端收到HTTP请求时,可以在响应头里面添加一个 Set-Cookie选项,浏览器收到响应后会保存Cookie,对该服务器的每一次请求中都在 Cookie请求头中添加 Cookie信息。Cookie可以根据需要来配置

Set-Cookie响应头部和 Cookie请求头部

服务器可如此配置 Cookie信息,向客户端发送 Cookie信息

Set-Cookie: =

2.1 会话期 Cookie

在没有指定有效期(max-age)和过期时间(Expires)时,Cookie会生成最简单的Cookie:会话期Cookie
会话期Cookie会随着浏览器关闭而被自动删除,但有些浏览器也提供了会话恢复功能,这种情况下,即使关闭了浏览器,会话期Cookie也会被保存

2.2 持久性 Cookie

在指定有效期或者过期时间后,Cookie会生成持久性Cookie,在满足时间限制的条件下,不会过期。过期时间点以客户端的时间点为准

2.3 Cookie的 Secure和 HttpOnly标记

如果一个 cookie被设置为 Secure=true,那么这个 cookie只能用https协议发送,如果使用的是http协议,那么该 cookie不会被发送。
如果一个 cookie中设置了 HttpOnly属性,那么程序(JS脚本等)将无法获取到 cookie的信息,如果 cookie不想被客户端JS调用,则应该设置为 HttpOnly

2.4 Cookie的作用域

可以通过设置 Domain和 Path标志定义 Cookie的作用域,也就是 Cookie会发送给哪些URL
Domain可以指定主机,如果缺省,则为当前文档的主机
Path可以指定主机上的哪些路径,匹配 Path后,其子路径也会被匹配


3 安全

3.1 会话劫持和XSS

Cookie常用来标记用户和授权会话,因此,如果 Cookie被窃取,可能导致用户的会话收到攻击,XSS攻击常用于窃取 Cookie。
可以通过设置 HttpOnly属性阻止客户端JS访问 Cookie,从而一定程度上缓解此类攻击

3.2 跨站请求伪造(CSRF)

CSRF的原理很简单,譬如你曾经在网上银行进行登录或者汇款等操作,而此时 cookie仍然有效(没有其他的验证步骤),此时如果打开了一个诸如这样的链接


那么银行中的钱很可能会被转走,有一些方法能够有效的阻止此类事件。

  • 过滤用户输入来防止 XSS
  • 敏感操作需要确认,增加一些验证步骤等
  • 对于敏感信息的 cookie,设置较短的生命周期

你可能感兴趣的:(HTTP(二))