Cookie

146 阅读3分钟

一 Cookie是什么?

  1. Cookie是浏览器访问服务器后,服务器下发给浏览器的一段数据(一般最大为4k)
  2. 浏览器需要保存Cookie,一般不要随便删除
  3. 之后浏览器每次访问该服务器,都要携带对应的Cookie
  4. Cookie的主要作用
    (1) 会话状态管理(登录,购物车等)
    (2) 个性化设置(网站皮肤等)

二 与Cookie相关的两个首部字段

  1. Set-Cookie,当服务器开始状态管理的时候,会事先告知各种信息。
  2. Cookie会告知服务器,当客户端想获得HTTP状态管理支持时,就会在请求中包含从服务器接收到的Cookie。接收到多个Cookie时,同样可以以多个Cookie的形式发送。
   Cookie:status=enable

三 Set-Cookie首部字段的属性

  1. NAME=VALUE,赋予Cookie的名称和值,必须值
  2. expires=DATE,Cookie的有效期,由于他与系统本地时间有关,因此不太准确,若不明确指定则默认为浏览器关闭前为止。max-age也可以设置Cookie的有效期的,它的单位为秒,是一个相对时间。max-age大于零,表示存活多少秒,等于零表示立即销毁,小于零表示浏览器串口关闭销毁。如果同时指定expires和max-age,那么max-age的优先级更高。
  3. path=PATH,将服务器上的文件目录作为Cookie的适用对象,若不指定,则默认为文档所在的文件目录
  4. domain=域名,作为Cookie适用对象的域名,若不指定则默认为创建Cookie的服务器的域名。Cookie是允许跨域的,如果domain=.text.com,那么A.text.com和B.text.com都可以获取到该Cookie。
  5. Secure,仅在HTTPS安全通信时才会发送Cookie。
  6. HttpOnly,加以限制,使Cookie不能被JavaScript脚本访问。例如,防止跨站脚本攻击(Cross-site scripting,XSS )对Cookie的信息窃取。
  7. SameSite 站发出的http请求,携带这个Cookie。可以防止 CSRF(Cross-Site Request Forgery) 攻击和用户追踪。它可以设置三个值。Strict最为严格,完全禁止第三方 Cookie,跨站点时,任何情况下都不会发送 Cookie。换言之,只有当前网页的 URL 与请求目标一致,才会带上 Cookie。Lax规则稍稍放宽,大多数情况也是不发送第三方 Cookie,但是导航到目标网址的 Get 请求除外。

四 XSS(cross-site scripting)

这种攻击的本质是浏览器将攻击者的用户输入数据当做javascript代码执行了。防御XSS的最佳策略是对数据进行严格的输出编码,使得攻击者提供的数据不在被浏览器认为是脚本而执行。例如,使用httponly,无法通过document.cookie来读写cookie;用token代替cookie;用户输入的时候校验一下,不循序输入不合法字符。

五 CSRF(cross-site request forgery)

跨站请求伪造,它可以在被攻击者毫不知情的情况下,以被攻击者的名义伪造请求发送给受攻击站点。假设被攻击者刚登录过某网站,且session没有过期。接着又通过诱骗点击进入攻击者网站。这时候攻击者网站就可以借助cookie,伪造请求,从而获取被攻击者的隐私或者做一些非法操作。可以通过验证HTTP Refer字段,在请求地址中添加token并验证,以及sameSite等解决。