小小的Cookie,竟然隐藏了这么多知识点

161 阅读2分钟

cookie在http(s)传输中起着至关重要的作用,但带来的安全问题也让开发者伤透脑筋。

Chrome 51版本开始支持cookie的samesite属性,csrf攻击有希望被终结,这里总结下cookie的现有属性(以后可能还会增加新属性)。

name

name用来指定cookie的名字,就像人一样要有自己的名字

value

value用来指定cookie的值

expire

  1. expire用来指定cookie的过期时间

  2. 超过这个时间,cookie将失效

  3. 如果没有指定expire,则结束会话后cookie将失效

path

  1. path用来指定cookie的路径集

  2. 比如将path设置为/api/,则请求/api/、/api/info、/api/data、/api/user/list等服务端路径时cookie将能够被传递

domain

  1. domain用来指定cookie的作用域

  2. 如果指定作用域为【.xxx.com】,则cookie可以在xxx.com及其子域中传递

  3. 如果指定作用域为【test.xxx.com】,则cookie只能在【test.xxx.com】中传递

secure

  1. secure用来指定cookie只能基于SSL封装的安全协议传递

httponly

  1. httponly用来指定cookie只能用于传输,而不能被客户端读取

  2. 服务端设置该属性后,web端javascript将无法获取cookie

samesite

  1. samesite用来指定cookie只能在domain指定的作用域之间传递

  2. 在客户端没有发生DNS劫持的前提下,它可以有效解决CSRF攻击

  3. samesite基于secure,意味着要使用samesite必须指定secure

  4. Chrome 51版本开始支持cookie的samesite属性

  5. samesite支持3种模式

    1. Strict 最为严格,完全禁止第三方cookie,跨站点(与domain指定作用域不一致)时,任何情况下都不会发送 Cookie。

    2. Lax 规则稍稍放宽,大多数情况也是不发送第三方cookice,但是导航到目标网址的Get请求除外。

    3. None 禁用samesite限制