- cookie是服务器委托浏览器存储的一些数据,从而使服务器从无状态变为有状态,也就是拥有了记忆能力;
- 响应报文使用Set-Cookie字段发送“key-value”形式的Cookie值;
- 请求报文里用Cool=kie字段发送多个Cookie值;
- 为了保护Cookie,可以给他设置过期时间(Expires、Max-Age)、作用域(Domain域名、path路径)、HttpOnly等属性;
(1)Expires是绝对时间,如GMT 2019 年 12 月 12 号 9 点 10 分”;Max-Age是相对时间,如10秒;两者可同时出现,时间可以一致也可以不一致,不一致时,浏览器优先采用Max-Age;
(2)Domain和Path制定了Cookie所属的域名和路径,浏览器在发送Cookie前会从URI中提取出host和path,判断是否一致,若不一致,就不会在请求头中发送Cookie;
(3)HttpOnly告诉浏览器该Cookie只能通过浏览器HTTP协议传输,禁止其他方式访问,这样JS引擎就会禁止使用document.cookie等API获取Cookie,避免XSS攻击。
(4)SameSite:可以防范XSRF攻击,设置为“SameSite=Strict”可以严格限定Cookie不能随着跳转链接跨站发送,而“SameSite=Lax”则相对宽松,允许GET/HEAD等安全方法,但是POST禁止发送;
(5)Secure:表示该Cookie仅能用于HTTPS协议加密传输,明文的HTTP协议会禁止发送,但Cookie本身不是加密的,浏览器里还是以明文的形式存在。 - Cookie最基本的用途是身份识别,是现有状态的会话事务。
扩展:
- XSS攻击:跨站脚本攻击,获取到到某用户的Cookie,冒充该用户去访问网站。详细的XSS介绍可以查看这篇文章,介绍的非常详细
- XSRF攻击:跨站请求伪造,攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站,并做一些操作(如购买物品),由于浏览器曾经认证过,所以被访问的网站会以为是真正的用户在操作。
总结: XSS与XSRF的区别在于:XSS是利用用户对指定网站的信任,XSRF是利用网站对用户浏览器的信任。预防XSRF可以随机生成token或者设置SameSite属性。