cookie可设置哪些属性?httponly?
chrome控制台的application下可查看:
cookie:一般由服务器生成,可以设置过期时间
存储大小:4K
与服务端通信:每次都会携带在 header 中,对于请求性能影响
cookie
name | 字段为一个cookie的名称。 |
value | 字段为一个cookie的值。 |
Domain | 字段为可以访问此cookie的域名。 |
Path | 字段为可以访问此cookie的页面路径。 比如 :domain:abc.com, path: /test, // 那么只有/test路径下的页面可以读取此cookie。 |
expires/Max-Age | 字段为此cookie超时时间。若设置其值为一个时间,那么当到达此时间后,此cookie失效。 不设置的话默认值是Session,意思是cookie会和session一起失效。 当浏览器关闭(不是浏览器标签页,而是整个浏览器) 后,此cookie失效。 |
Size | 字段 此cookie大小 |
HttpOnly | 字段 cookie 的 httponly属性。若此属性为true,则只有在http请求头中会带有此cookie的信息,而不能在页面中通过JS 的 document.cookie来访问此cookie。 不能通过 JS 访问 Cookie,减少 XSS 攻击 |
Secure | 字段 设置是否只能通过https来传递此条cookie |
Same-site | 规定浏览器不能在跨域请求中携带 Cookie,减少 CSRF 攻击 |
Cookie 的弊端
1 : Cookie
数量和长度的限制, 每个 domain 最多只能有 20 条 cookie;每个cookie大小不超过4k,有有效期,过期后将会删除
2: 安全性问题: 如果cookie被人拦截了,那拦截者就可以获取到所有 session 信息,即使加密也无事于补, 因为拦截者不需要知道cookie的意义,他只需要原样转发cookie就可以达到目的,
3: 有些状态不可能保存在客户端。例如,为了防止重复提交表单,我们需要在服务器端保存一个计数器。如果我们把这个计数器保存在客户端,那么它起不到任何作用。
问题思考:
什么是 Cookie 隔离?(或者说:请求资源的时候不要让它带 Cookie 怎么做)?
- cookie 隔离技术:则是通过使用多个非主要域名来请求静态文件,那如果静态文件都放在主域名下,那静态文件请求的时候都带有的 cookie 的数据提交给 server 的,非常浪费流量,所以不如隔离开。
- 因为 cookie 有域的限制,因此不能跨域提交请求,故使用非主要域名的时候,请求头中就不会带有 cookie 数据,这样可以降低请求头的大小,降低请求时间,从而达到降低整体请求延时的目的。
- 同时这种方式不会将 cookie 传入 Web Server,也减少了 Web Server 对 cookie 的处理分析环节,提高了 webserver 的 http 请求的解析速度。