cookie在http(s)传输中起着至关重要的作用,但带来的安全问题也让开发者伤透脑筋。
Chrome 51版本开始支持cookie的samesite属性,csrf攻击有希望被终结,这里总结下cookie的现有属性(以后可能还会增加新属性)。
name
name用来指定cookie的名字,就像人一样要有自己的名字
value
value用来指定cookie的值
expire
-
expire用来指定cookie的过期时间
-
超过这个时间,cookie将失效
-
如果没有指定expire,则结束会话后cookie将失效
path
-
path用来指定cookie的路径集
-
比如将path设置为/api/,则请求/api/、/api/info、/api/data、/api/user/list等服务端路径时cookie将能够被传递
domain
-
domain用来指定cookie的作用域
-
如果指定作用域为【.xxx.com】,则cookie可以在xxx.com及其子域中传递
-
如果指定作用域为【test.xxx.com】,则cookie只能在【test.xxx.com】中传递
secure
- secure用来指定cookie只能基于SSL封装的安全协议传递
httponly
-
httponly用来指定cookie只能用于传输,而不能被客户端读取
-
服务端设置该属性后,web端javascript将无法获取cookie
samesite
-
samesite用来指定cookie只能在domain指定的作用域之间传递
-
在客户端没有发生DNS劫持的前提下,它可以有效解决CSRF攻击
-
samesite基于secure,意味着要使用samesite必须指定secure
-
Chrome 51版本开始支持cookie的samesite属性
-
samesite支持3种模式
-
Strict 最为严格,完全禁止第三方cookie,跨站点(与domain指定作用域不一致)时,任何情况下都不会发送 Cookie。
-
Lax 规则稍稍放宽,大多数情况也是不发送第三方cookice,但是导航到目标网址的Get请求除外。
-
None 禁用samesite限制
-