Cookie和会话安全详解

一、Cookie与会话的定义

  1. Cookie是Web服务端发送给用户浏览器的一小段数据,浏览器会存储这些数据,并在后续发往服务器的请求中带上它们。
  2. 会话的概念
    1. 会话的普遍概念是指:从用户登录直到退出期间,客户端与服务器的交互过程,会话的英文单词是session。
    2. 会话的另一个概念是指:在开发语言中,服务器端存储的会话数据也称为session,一般前者基于后者实现。

二、第一方Cookie与第三方Cookie

2.1 第一方Cookie

  1. 第一方cookie指用户当前访问的网站直接植入的cookie,通常是网站用于正常功能的cookie,如表示用户身份、记住用户的语言设置等。

2.2 第三方Cookie

  1. 当用户访问一个网站时,如果这个网站加载了其他网站的资源,此时由其它网站植入的cookie就称为第三方Cookie。
  2. 当不同的网站嵌入了同一个第三方网站资源时,用户访问这些网站时会带上相同的第三方cookie去加载第三方资源,因此第三方网站通过这个第三方cookie就可以实现用户在不同网站的访问行为分析,从而实现更精准的广告投放。
  3. 第一方cookie和第三方cookie是相对的概念,我们根据用户是直接访问网站还是通过外部网站嵌入访问的,来决定该网站的cookie是第一方的还是第三方的,而不是cook根据ie自身属性决定。

三、Cookie属性

  1. Cookie相当于服务器端颁发给用户的身份凭证,如果攻击者获取了用户的凭证,就相当于获取了用户的身份,即不需要账号与密码就可登录该账号(cookie未过期时),因此cookie的安全很重要。

3.1 Domain属性

  1. Domain属性用于指定cookie在哪些域名中生效,即访问哪些域名时浏览器会发送这个cookie。
  2. 该属性也决定了哪些域名的网页可以通过JavaScript访问这个cookie。
  3. 如果域名前面带了一个点号“.”,就表示该cookie对当前域名及其子域名都有效,浏览器访问该域名及其子域名时都会带上这个cookie;若不带点号,则仅访问当前域名时携带cookie,但同时子域名的JavaScript代码可访问该cookie;若不指定Domain属性,则该cookie为host-only-cookie即只对当前域名有效且子域名无法访问该cookie
  4. 注意:部分网站中,服务器端设置cookie的Domain属性为父域名时会收到浏览器的拒绝【受到公共后缀列表影响】。
  5. 注意:Domain属性不包含端口信息,即Cookie的域名隔离不受端口的限制!因此如果一个域名同时在不同的端口运行了多个Web应用,使用cookie存储重要数据时需要评估每个应用的安全性防止cookie通过其中某个应用的安全漏洞被泄露出去。
  6. 注意:其他子域名的应用或其他端口的应用除了可以读取当前应用的cookie,也能写入特定名称的cookie,从而干扰当前应用,使其读取到错误的cookie。

3.2 Path属性

  1. Path属性用于指定cookie的生效路径,即只有访问这个路径及其子路径时,浏览器才会携带这个cookie。
  2. 若不设置该属性,则path属性默认值就是当前页面所在的路径。
  3. 如果一个域名中不同路径有很多不同的应用,同名的Cookie会造成干扰,这时可以设置cookie的Path属性将它们区分开来。
  4. 重要:不能依赖Path属性来做安全隔离,因为在浏览器中一个路径的页面可以使用iframe嵌入另一个路径的页面,而这两个页面是同源的,因此他们之间的DOM可以互访问,一个路径的页面便可以读取另一个路径页面的Cookie,所以在一个域名的不同路径下运行互相不信任的Web应用是危险的做法。示例如下
<ifram id="test" src="/admin/" width=0 height=0></iframe>
<script>
window.onload = function() {alert(document.getElementById('test').contentDocument.cookie);
}
</script>

3.3 Expires属性

  1. 服务端可以通过该属性设置cookie的有效期,浏览器会在这个cookie到期后自动将其删除。
  2. 如果没有指定expires属性。则该cookie叫做“临时cookie(也叫会话Cookie即仅在当前会话有效)”,当关闭浏览器后将自动删除该cookie
  3. 注意:浏览器为了保证下次启动时用户体验的连续性(即每次启动时“打开上一次浏览的网页”),即使关闭浏览器也不会删除临时cookie。
  4. 浏览器对每个站点有最大cookie数量的限制,超限则会删除旧的cookie(不管该cookie到没到期),攻击者可利用这一点,通过植入多个cookie,“挤掉”受害者正常的cookie。

3.4 HTTPOnly属性

  1. 该属性的作用是:让该cookie只能用于HTTP/HTTPS传输,使得客户端JavaScript脚本无法读取cookie,这在一定程度上减少了XSS漏洞带来的危害。

3.5 Secure属性

  1. 给Cookie设置Secure属性后,该cookie只会被包含在HTTPS请求中。
  2. 在客户端通过JavaScript设置cookie或者在服务端通过set-cookie头来设置cookie时,如果当前网站使用的是HTTP协议,则写入带Secure属性的Cookie就会失败。

3.6 SameSite属性

  1. 服务端在Set-Cookie响应头中通过SameSite属性指示是否可以在跨站请求中发送该Cookie即该cookie是否能作为第三方cookie。
  2. 当cookie没有指定SameSite属性时,现代浏览器的表现与SameSite=LAX时一致。
  3. 该属性的三个值
    1. None
      1. 不做限制,但当SameSite被设置为None时,要求cookie带上secure属性,即只能在HTTPS协议中发送该cookie。
    2. LAX
      1. 在普通的跨站请求中不发送cookie,但是导航到其他网站时(如点击链接)会发送cookie。
    3. Strict
      1. 完全禁止在跨站请求中发送cookie。
      2. 由于过于严格,因此实际中使用较少。
  4. 下表列举了常见的几种跨站请求在cookie的SameSite设置成什么值时才会发送。
    SameSite属性的设置对常见跨站请求的影响
  5. 除了影响cookie的发送,SameSite还会影响跨站点cookie的写入。
  6. 跨站点cookie的写入分以下两种情况
    1. 客户端通过JavaScript写入
      1. 跨站写入cookie时,若脚本未指定SameSite属性,则浏览器默认SameSite=LAX,因此浏览器会拒绝跨站点写入该cookie。
    2. 服务端通过Set-cookie写入
      1. 与客户端写入同理。
  7. 注意:这里的“同(跨)站点”的概念并不等同于同源策略中的“同(跨)源”的概念。它不像同源策略中的“同源”那样有严格的定义。

3.7 SameParty属性

  1. 如果一个企业运营了多个不同站点,这时即使将SameSite属性设置为LAX还是过于严格,会给跨站访问带来很多不便。
  2. 浏览器厂商提出SameParty属性的概念,允许企业将多个网站定义成一个可信站点集合,称为First-Part Sets第一方站点集合。
  3. 网站服务器将可信站点集合定义在./well-known/first-part-set文件中,当一个网站的页面要请求另一个网站资源时,浏览器会检测这两个网站是否处于一个First-Part Sets中,如果是,那么带有SameParty属性的第三方cookie将会被请求报文携带而不受SameSite属性的影响。

四、安全使用Cookie

4.1 Cookie前缀

  1. _Host-
    1. 如果一个cookie的名称中有这个前缀,服务端通过set-cookie头设置cookie或通过客户端脚本设置cookie时,只有满足以下四个条件,浏览器才会接受这个cookie
      1. 带有Secure属性:确保该cookie实在安全连接环境下写入的,不存在网络中间人的篡改。
      2. 不包含Domain属性:将该cookie与该域名绑定,只能由当前域名植入,不能对子域名生效。
      3. Path属性值为“/”
      4. 当前为HTTPS连接
  2. _Secure-
    1. 如果一个cookie的名称中有这个前缀,只有带有Secure属性且当前连接为HTTPS,浏览器才会接受这个cookie,相对“_Host-”前缀而言,它是约束更少的弱化版本。
  3. 如果要确保Cookie在安全的传输环境下被植入到客户端,可在cookie名称中加入“_Secure-”前缀;在子域名非常多的场景中,特别是子域名的安全不受控制时,建议在cookie名称中添加“_Host-”前缀,以确保该cookie不受其他域名影响。

4.2 保密性与完整性

  1. Web服务器应当把cookie当作不可信的外部输入数据,不能用cookie数据来做关键的判断。

五、会话安全

  1. 会话session的本质是标识不同的访问者并记录他们的状态。

5.1 会话管理

  1. 会话ID的随机性
    1. 会话ID(sessionID)最基本的要求是随机性。
    2. 会话ID也要足够长,防止枚举法。
  2. 过期与失效
    1. 超时机制应该在服务端实现,在时间到期后删除已存储的会话数据或标识该SessionID已失效。
  3. 绑定客户端
    1. 如果将会话与客户端绑定,即使攻击者窃取了SessionID,也无法在新的设备中登陆目标网站。
  4. 安全传输
    1. 现代Web应用基本上都是将SessionID写入Cookie中,并设置相应cookie的安全属性(如开启HTTPOnly、Secure属性)
  5. 客户端存储会话(使用JWT(JSON Web Token)机制用于会话管理)
    1. 上文所述的会话案例均为会话存储在服务端的场景,客户端只保存一个很短的SessionID。
    2. JWT本质上是带签名的JSON数据【类比SSH的签名】。
    3. 在用户登陆后,服务端将会话信息生成为一个带签名的JWT写入客户端。
    4. 客户端每次访问时都带上JWT,服务端可以验证签名的有效性并提取会话相关的信息。
    5. 使用这种机制可以将会话信息完全存储在客户端,使服务端无状态。
    6. 缺陷
      1. 已签发的会话Token无法吊销,因此需要在签发Token时加入有效期,并尽量使用短的有效期(防止有效期过长使发生安全隐患概率增加),可过短的有效期又会影响用户体验。
    7. 签名使用的密钥的安全管理也很重要,一旦密钥泄露,攻击者就可冒充服务器端签发任意账号的JWT,使所有账号受到威胁。

问题汇总

  1. Domain属性和Path属性功能没有重复吗?
    1. 答:注意!一个是域名及其子域名,一个是路径及其子路径
  2. 同(跨)站点与“同(跨)源”的概念区别?
    1. 解答
      1. 同(跨)站点概念较广,即只要是两个不同的网站,均为跨站点。
      2. 同(跨)源定义明确,如两个URL同源则必须要求两个URL的协议类型、域名、端口相同。

参考资料

  1. 《白帽子讲Web安全(第二版)》—— 吴翰清 叶敏
  2. 阮一峰:Cookie 的 SameSite 属性

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/855742.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

成为产品经理的第一天,有多少人被团队协作难倒了?

虽然主要聚焦于产品设计和开发过程,但产品经理同样需要强大的项目管理和团队协作能力,你需要与设计师、工程师、市场团队紧密合作,确保产品从概念到市场的每一个环节都顺利进行。选择这类岗位时,重要的是积极参与团队活动,主动承担项目责任,不断学习项目管理的理论与工具…

时间序列分析中的互相关与相干性分析:前导-滞后关系的理论基础与实际应用

时间序列数据在现代数据分析中无处不在。从金融市场的股票价格波动到生物医学领域的心电图与脑电图信号,甚至是日常生活中的用水量变化,都可以通过时间序列来表征。深入理解时间序列信号之间的关联性对于提取有意义的数据特征至关重要。本文将重点介绍两种基本但强大的分析工…

面向教学科研的汽车电气与电子控制系统开发及测试实验室

为满足复合型人才的需求,解决当前学生工程开发及实践能力不足的问题,需要与汽车行业实际的应用进行适配。经纬恒润以量产车型电子电气开发经验为基础,推出与企业研发测试同步的面向教学科研的汽车电子电气开发验证实验室,旨在从产业中来到教学中去,产教融合。概述智能汽车…

jquery多国语言切换特效

这是一款实现多国语言切换的jquery特效。在这个示例中,通过简单的js代码,实现包括中文和英文在内的7种不同国家语言的切换效果。在线预览 下载使用方法 在页面中引入jquery和style.css。<link rel="stylesheet" href="css/style.css"> <script…

Avalonia 国际化之路:Resx 资源文件的深度应用与探索

在当今全球化的软件开发浪潮中,应用的国际化(i18n)与本地化(L10n)显得尤为重要。Avalonia UI 作为一款强大的跨平台 UI 框架,为开发者提供了多种实现国际化的途径。其中,使用传统的 Resx 资源文件进行国际化处理,不仅兼容了原 Winform、WPF、ASP.NET Core 等开发场景下…

茶饮门店管理新篇章:板栗看板的实践与启示

茶饮企业可以通过板栗看板实现门店管理的优化和效率提升。从创建团队与看板、设置任务与分配、团队协作与沟通、进度跟踪与数据分析到优化与改进以及安全性能保障等方面入手,全面提升门店管理的水平和效率。近期,库迪咖啡以一种创新的“嵌入式”模式迅速扩展,其门店纷纷入驻…

修改网站首页排序,网站首页内容排序方法

修改网站首页内容的排序通常涉及以下几个步骤:登录后台:使用管理员账号登录网站后台。 找到内容管理:在后台导航中找到“内容管理”或“文章管理”。 编辑内容:选择需要排序的内容,点击“编辑”按钮。 设置排序:在编辑页面中,找到排序选项,设置内容的顺序。常见的排序方…

错误码:NET::ERR_CERT_AUTHORITY_INVALID,解决浏览器提示证书无效的问题

当您在访问某个网站时遇到“NET::ERR_CERT_AUTHORITY_INVALID”错误时,这意味着浏览器认为该网站的SSL证书不是由受信任的证书颁发机构(CA)签发的。这可能是由于多种原因造成的,包括证书过期、自签名证书、中间证书缺失等。以下是一些解决方法:检查证书颁发机构:确认证书…

PbootCMS在阿里云主机上邮件发送失败,提示“服务器已经禁用stream_socket_client和fsockopen函数”,如何解决?

当你在阿里云主机上使用PbootCMS时,如果遇到邮件发送失败,并且提示“服务器已经禁用stream_socket_client和fsockopen函数,请至少开启一个才能发送邮件!”的错误,这通常是因为阿里云主机的安全策略禁用了这些函数。以下是详细的解决步骤:登录阿里云管理后台:打开浏览器,…

高效与安全并重:高科技企业如何借助跨网文件交换系统实现双赢!

高科技企业在运营和发展过程中,会积累大量重要的核心数据,这些数据对于企业的技术创新、市场竞争优势以及商业机密保护至关重要。为了保障自身的信息安全、保护知识产权和核心数字资产,高科技企业通常会通过防火墙、网闸、虚拟化等方式,实施企业内网和外网隔离。实施网络隔…

南通知识付费分销系统搭建

图源 www.tuzhi.ltd在当前的教育和软件领域,知识付费模式正在逐渐普及,成为教育和培训行业的重要趋势之一。尤其在数字化转型的大潮中,在线教育系统的作用日益凸显,其为教学者和学习者之间的知识交流搭建了桥梁。以南通为例,当地的教育机构、老师甚至企业都纷纷尝试采用更…