浅谈 Cookie

Cookie 是存储在浏览器目录中的文本文件,当浏览器运行时,存储在 RAM 中发挥作用 (此种 Cookies 称作 Session Cookies),一旦用户从该网站或服务器退出,Cookie 可存储在用户本地的硬盘上 (此种 Cookies 称作 Persistent Cookies)。

Cookie 技术诞生以来,它就成了广大网络用户和 Web 开发人员争论的一个焦点。有一些网络用户,甚至包括一些资深的 Web 专家也对它的产生和推广感到不满,这并不是因为 Cookie 技术的功能太弱或其他技术性能上的原因,而是因为 Cookie 的使用对网络用户的隐私构成了危害。因为 Cookie 是由 Web 服务器保存在用户浏览器上的小文本文件,它包含有关用户的信息。

实际上,Cookie中保存的用户名、密码等个人敏感信息通常经过加密,很难将其反向破解。但这并不意味着绝对安全,黑客可通过木马病毒盗取用户浏览器Cookie,直接通过偷取的Cookie骗取网站信任。可以看出,木马病毒入侵用户电脑是导致用户个人信息泄露的一大元凶。

对于一个任何Http Request来说,提交给Server端的时候,它能够安全访问的Cookie的域名必须在这个HTTP Reuqest的域名路径中。 举例来说,发出一个http://ccc.bbb.aaa.com/的 请求时,随着这个http request一块发送到server端的cookies会自动包括所有 以ccc.bbb.aaa.com, .bbb.aaa.com, .aaa.com为域名的Cookies,这是由Cookie本身的规范所限制的,浏览器如果不是按照这个规范实现,那么就会存在严重安全漏洞,因为那样的话意味着任何一 个服务器都可以读到同一个用户访问别的网站时留下的Cookie。

Cookie主要属性

1.path
2.domain
3.max-age
4.expires:是expires的补充,现阶段有兼容性问题:IE低版本不支持,所以一般不单独使用
5.secure
6.httponly : JS不能读写HttpOnly Cookie

属性之间使用英文分号和空格("; ")连接

浏览器存放cookie包含的字段:
name、value
expiry-time:由Cookie中的expires和max-age产生
domain、path
creation-time、last-access-time
persistent-flag:持久化标记,默认为false,表示是session cookie
secure-only-flag
http-only-flag
host-only-flag:Cookie中不包含Domain属性或者Domain为空或者不合法时为true。

HttpOnly属性——防止程序获取cookie后进行攻击
如果Cookie中设置了HttpOnly属性,那么通过程序(JS脚本、Applet等)将无法读取到Cookie信息,能有效的防止XSS攻击。

Secure——防止信息传输过程中的泄露
true —— 只能在HTTPS连接中传输,HTTP连接不会传输,所以不会被窃取到Cookie的具体内容
false —— HTTP、HTTPS连接都可以传输

Session Cookie
Session Cookie是没有expiry date的,会话结束也会一并删除。

SameSite:

值为Strict,完全禁止第三方Cookie,跨站时无法使用Cookie。
值为Lax,允许在跨站时使用Get请求携带Cookie,下面有一个表格介绍Lax的Cookie使用情况。
值为None,允许跨站跨域使用Cookie,前提是将Secure属性设置为true。
Priority :Cookie的优先级。值为Low/Medium/High,当Cookie数量超出时,低优先级的Cookie会被优先清除。

domain
cookie无法设置除当前域名或者其父域名之外的其他domain。 这个是浏览器出于对cookie的保护造成的,也就是cookie无法跨域设置。

1.cookie的作用域是domain本身以及domain下的所有子域名
2‘domain参数可以设置父域名以及自身,但不能设置其它域名,包括子域名,否则cookie不起作用。 这个是浏览器出于对cookie的保护造成的,也就是 cookie无法跨域设置。
3.若domain不带点,只有当前域名的服务器可以获取到cookie,子域名拿不到cookie;若domain带点,当前域名&子域名都可以拿到cookie
对应Chrome,如果显示声明,不管domain带不带点,都是带点存储;只有非显示声明domain的cookie,浏览器存储才是不带点

有几个知识点需要注意:

  1. 标记cookie的key区分大小写,不同大小写对应不同的cookie
  2. 不同的path,可以存放不同的cookie
  3. path具有继承性,子目录可以访问父目录的cookie
  4. 在设置cookie时,不能设置跨域cookie,通过js也不能读取跨域cookie(js不会报错,只是不生效)
  5. Secure – 安全
    指定cookie的值通过网络如何在用户和WEB服务器之间传递。这个属性的值或者是“secure”,或者为空。
    缺省情况下,该属性为空,也就是使用不安全的HTTP连接传递数据。如果一个 cookie 标记为secure,那么,它与WEB服务器之间就通过HTTPS或者其它安全协议传递数据。
    不过,设置了secure属性不代表其他人不能看到你机器本地保存的cookie。换句话说,把cookie设置为secure,只保证cookie与WEB服务器之间的数据传输过程加密,而保存在本地的 cookie文件并不加密。如果想让本地cookie也加密,得自己加密数据。

Cookie跨域共享

前端配置 withCredentials=true,后段设置Access-Control-Allow-Origin不能为 " * ",必须是具体源地址

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值