Cookie和会话安全

Cookie时Web服务端发送给用户但浏览器的一小段数据,浏览器会存储这些数据并且在后续发往服务器的请求中带上它们。(是一种将数据存储在客户端的方式)

cookie分类:

第一方Cookie:

First-Party Cookie,是指用户当前访问的网站直接植入的Cookie,通常时网站用于正常功能的Cookie,便于使网站记住用户的偏好设置。

第三方Cookie

Third-Party Cookie,当用户访问一个网站时,如果这个网站加载了其他网站的资源,此时其他网站植入的Cookie就称为第三方Cookie。

注意:第一方和第三方Cookie是相对的概念,我们是根据用户是直接访问网站还是通过外部网站嵌入访问来决定该网站是第一方还是第三方。比如我有 a.com, 其中有一个ad.com广告网站,那么我访问a.com上的ad.com就是访问第三方Cookie,如果直接访问ad.com就是访问第一方Cookie

联想:网站个性化广告的投放

我在浏览第一个网站时关注了某个物品,当我到另外一个网站,会推送给我那个物品的广告,就是这两个网站拥有相同的第三方Cookie。

所有浏览器都会接收第一方Cookie,但是浏览器隐私策略可能会阻止部分第三方Cookie。

Cookie属性

  1. Domain属性:

    • 指定Cookie在哪些域名中生效,即访问哪些域名会发送这个Cookie,也决定了哪些域名的网页可以通过JavaScript访问这个Cookie。

    • 如果域名前带 ‘ . ’ 号,表示该Cookie对当前域名及其子域名都有效。如果不带仅在当前域名有效。

    • 如果在服务端通过Set-Cookie 写入Cookie时,不指定Domain属性,Cookie的生效范围仅限于当前域名,Host-Only Cookie。

    • 目前主流浏览器都遵循RFC 6265规范,在 Set-Cookie 或 JavaScript 中写入Cookie时只要加入了Domain属性,即使没有点号 “ . ”前缀,它也不是 Host-Only Cookie。

    • 注意:Cookie的域名隔离不受端口的限制,须评估使用该域名不同端口的web应用的安全性

  2. Path属性:

    • 用于指定Cookie生效路径,只有访问这个路径时,浏览器才会发送这个Cookie。

    • 如果不设置Path,默认值就是当前页面所在路径。

    • 不能依赖Path来做安全隔离,因为在浏览器中一个路径页面可以使用ifram嵌入另一个路径页面,而这两个页面为同源,他们之间DOMD可以互相访问,所以一个页面可以读取另一个页面的Cookie

  3. Expries属性:

    • 服务端可以通过Expires属性来设置Cookie的有效期,浏览器会在这个Cookie到期后自动将其删除。

    • 没有指定Expries属性的Cookie叫做“临时Cookie”,在关闭浏览器后将自动删除。

    • 设置了有效期的Cookie,浏览器并不能保证他在有效期内不被删除,因为浏览器对Cookie的存储存在一个上限,超过这个上线,会删除旧的Cookie。

  4. HttpOnly属性:

    • 说明Cookie只能用于HTTP/HTTPS传输,客户端JavaScript无法读取它。

  5. Secure属性:

    • 给Cookie设置该属性后,Cookie指挥在HTTPS亲求种被发送给服务器,非加密HTTP请求是不会发送该Cookie的。

  6. SameSite属性:

    • SameSite是一个新的安全属性,服务端在 Set-Cookie响应头中通过SameSite属性指定是否可以在跨站请求中发送该Cookie,即它能不能作为第三方Cookie。

      • None:

        • 不做限制,任何场景下都会发送Cookie。但是当SameSite被设置为None时,要求Cookie带上Secure属性,即只能在HTTPS协议中发送。

      • LAX:

        • 在普通的跨站请求中都不发送Cookie,但是导航到其他网站时(点击连接)会发送Cookie。

        • 在跨站点提交表单的场景中,只有GET方法提交的表单会带Cookie。

      • Strict:

        • 完全禁止在跨站请求中发送Cookie,即使点击站外链接也不会发送Cookie,只有当请求的站点与浏览器地址栏中URL中域名属于同一个站点时才会发送Cookie。

        • 由于会影响到用户体验,使用非常少。

    • SameParty属性:

      • 即允许企业将多个网站定义成一个可信站点集合,称为First-Party Sets。当一个网站请求另一个网站资源时,浏览器会检测这两个网站是否同处一个First-Party Sets,如果是带有SameParty 属性的第三方Cookie也会被带上。

    • Cookie前缀:

      • 在存在子域名的网站中,每个站点可以通过设置Cookie的Domain属性,写入一个让所有子域名都可见的Cookie。这将带来一定的混乱,每个站点都无法确定一个Cookie是不是自己写入的。

      • _Host-

        • 服务端通过 Set-Cookie 头设置 Cookie,或者前端脚本通过 document.cookie 属性设置Cookie时,只有满足以下四个条件浏览器才接受:

          1. 带有Secure属性

          2. 不包含Domain属性

          3. Patj属性为“ / ”

          4. 当前为HTTPS链接

      • _Secure-

        • 只有带Secure属性且当前连接为HTTPS浏览器才会接受,是一个约束更少的弱化版本。

保密性和完整性

在Web服务器角度来看,Cookie是对用户完全公开的,应该把Cookie当作不可信的外部输入数据,不能用Cookie数据来做关键的判断。

会话安全

在Web应用中,会话的本质是标识不同的访问者,记录他们的状态,攻击者如果窃取或者伪造了一个会话标识就相当于盗取一个账号身份。

会话管理

会话ID最基本的要求是随机性。

过期和失效

由于Cookie中有效时期访问者可以任意修改Expires属性,所以超时机制应该在服务端实现的。

绑定客户端

如果将绘画与客户端绑定会更安全,即使SessionID被窃取也无法在新的设备中登录目标网站。(QQ异地登录?)

另一个更安全的做法是在登录时将会话与访问者的IP地址绑定,但是会影响用户体验。

安全传输

现代Web应该基本上都是将SessionID写入到Cookie中,所以设置相应的Cookie安全属性非常重要,大多数情况下,建议开启HttpOnly和Secure属性。

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

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

相关文章

芯知识 | WT588F02B语音芯片IC支持用户自行更换语音内容的应用优势介绍

语音芯片,作为现代电子产品中的关键组件,为各类设备提供了丰富的人机交互方式。其中,声音播放提示IC的功能日益强大,尤其是当它们支持客户通过配套下载器实现在线更换芯片内部语音内容时,这种灵活性为产品设计带来了显…

Vue中表单数据和过滤器的简单使用

收集表单数据 v-model的三个修饰符: lazy:失去焦点在收集数据 number: 输入字符串转为有效数字 trim:输入首尾空格过滤 < input type"text" v-model"person.account">则v-model收集的是value值&#xff0c;用户输入的就是value值 < input type…

分布式理论 | RPC | Spring Boot 整合 Dubbo + ZooKeeper

一、基础 分布式理论 什么是分布式系统&#xff1f; 在《分布式系统原理与范型》一书中有如下定义&#xff1a;“分布式系统是若干独立计算机的集合&#xff0c;这些计算机对于用户来说就像单个相关系统”&#xff1b; 分布式系统是由一组通过网络进行通信、为了完成共同的…

Django 构建动态前端页面详解

概要 Django 是一个强大的 Python Web 框架&#xff0c;广泛用于后端开发。然而&#xff0c;它也支持直接使用 HTML, CSS, 和 JavaScript 来构建动态的前端界面。本文将详细介绍如何在 Django 项目中使用这些技术&#xff0c;包括设置静态文件、编写 HTML 模板以及集成 JavaSc…

教育机构小程序管理系统的全方位优化

随着互联网的快速发展&#xff0c;线上教育也日益受到人们的关注和欢迎。为了满足广大学生和家长的需求&#xff0c;教育机构纷纷开发出自己的小程序管理系统。本文将详细介绍如何使用乔拓云平台&#xff0c;一键开发出自己的教育机构小程序管理系统。 1.进入乔拓云后台 首先&…

【难点】【LRU】146.LRU缓存

题目 法1&#xff1a;基于Java的LinkedHashMap 必须掌握法1。参考链接 关于LinkedHashMap的介绍 class LRUCache {int cap;LinkedHashMap<Integer, Integer> cache new LinkedHashMap<>();public LRUCache(int capacity) { this.cap capacity;}public int get…

Linux性能优化常做的一些事情

Linux性能优化是一个广泛的主题&#xff0c;涉及多个方面。以下是一些常见的Linux性能优化建议&#xff1a; 硬件和系统配置&#xff1a; 使用SSD替代HDD。确保系统有足够的RAM。使用多核CPU。配置合适的网络硬件和带宽。 磁盘I/O性能&#xff1a; 使用RAID来提高I/O性能。使用…

回归烟火气,中国烹饪正在进行一场重构

当前的中国厨电行业&#xff0c;急需一场前所未有的变革。 近几年&#xff0c;厨电行业已告别以往的跨越式增长&#xff0c;多数厨电企业陷入迷茫&#xff0c;如何才能打破增长瓶颈&#xff1f;《一点财经》认为&#xff0c;只有积极适应新形势&#xff0c;探索新的经营方式&a…

考拉兹猜想

考拉兹猜想&#xff08;Collatz conjecture&#xff09;又称奇偶归一猜想&#xff0c;是指对于每一个正整数&#xff0c;如果它是奇数&#xff0c;则对它乘3再加1&#xff0c;如果它是偶数&#xff0c;则对它除以2。如此循环&#xff0c;最终都能得到1。 编写一个程序&#xff…

【web安全】支付篡改

前言 菜某的总结&#xff0c;如有错误和补充欢迎评论指正。 内容仅供学习使用&#xff0c;切勿用于非法用途。 支付篡改的存在位置与影响 首先他的危害不言而喻&#xff0c;几乎任何一个拿出来都能给企业带来巨大的损失。 他出现的地方也是十分的广泛&#xff0c;从某种意…

复杂背景下的低空无人机检测与跟踪算法

doi&#xff1a;10.11884/HPLPB202335.230026 大视场中的目标丢失后需要再次检测&#xff0c;但是大视场的检测比较耗时。但是根据实验发现丢失目标通常发生在无人机运动区域的320x320范围内&#xff0c;所以设计辅助网络&#xff0c;当目标丢失后&#xff0c;以320x320区域图像…

Transformer Decoder的输入

大部分引用参考了既安的https://www.zhihu.com/question/337886108/answer/893002189这篇文章&#xff0c;个人认为写的很清晰&#xff0c;此外补充了一些自己的笔记。 弄清楚Decoder的输入输出&#xff0c;关键在于图示三个箭头的位置&#xff1a; 以翻译为例&#xff1a; 输…

七轴开源协作机械臂myArm视觉跟踪技术!

引言 ArUco标记是一种基于二维码的标记&#xff0c;可以被用于高效的场景识别和位置跟踪。这些标记的简单性和高效性使其成为机器视觉领域的理想选择&#xff0c;特别是在需要实时和高精度跟踪的场景中。结合机器学习和先进的图像处理技术&#xff0c;使用ArUco标记的机械臂系统…

20231218在Ubuntu18.04下以EXT4格式化HDD

20231218在Ubuntu18.04下以EXT4格式化HDD 2023/12/18 17:24 缘起&#xff1a; 编译一个Android10大概要200GB&#xff0c;编译10个Android10的SDK&#xff0c;3TB的HDD机械硬盘就估计会被填满了&#xff01; 如果使用rm -rf *这个命令将SDK一个一个逐个地删除&#xff0c;估计2…

Qt之图像处理

QPainter 绘制基本图形的类 一次性填充绘制 QVector<QPoint> drawPointsGray;//存储灰色的点 //...将所有要画灰色的点加入该数组中 painter.setPen(Qt::gray);//设置颜色 painter.drawPoints(drawPointsGray.data(), drawPointsGray.size());//测试 QImage 根据地址…

数据可视化(附带操作实例)

一、主要目的&#xff1a; 数据可视化是关于图形或表格的数据展示&#xff0c;旨在借助图形化手段&#xff0c;清晰有效的传达与沟通信息。通过直观地传达关键内容与特征&#xff0c;从而实现对相当稀疏而又复杂的数据集的深入洞察。熟悉在Python开发环境中支持数据可视化环节…

mybatis.interceptor.exception.SqLValidateException:Ilegal SQL::......

现象&#xff1a;⬇️ 描述&#xff1a;执行 SQL 没问题&#xff0c;应用代码报错 ⬇️ .mybatis.interceptor.exception.SqLValidateException&#xff1a;Ilegal SQL::SELECT voucherNo FROM voucher ORDER BY CAST(SUBSTRING(voucherNo FROM LOCATE(_, voucherNo) 1) AS U…

力扣刷题记录(15)LeetCode:509、70、746

目录 509.斐波那契数 70.爬楼梯 746.使用最小花费爬楼梯 总结 ​​​​​​ 用一个数组来存储前两个数的值&#xff0c;然后根据前两个数的值来确定当前的值。 class Solution { public:int fib(int n) {if(n<2) return n;vector<int> v;v.push_back(0);v.push…

ELK(九)—logstash

目录 简介安装部署测试 配置详解编写配置文件连接elasticsearch将数据推送到elasticsearch中。 简介 Logstash 是一个开源的服务器端数据处理管道&#xff0c;由 Elastic 公司维护和开发。它被设计用于从不同来源收集、处理和转发数据&#xff0c;以供 Elasticsearch 进行存储…

持续集成交付CICD:Jenkins使用GitLab共享库实现前端项目镜像构建

目录 一、实验 1. GitLab修改项目文件与Harbor环境确认 2.Jenkins使用GitLab共享库实现前端项目镜像构建 3.优化CI流水线封装Harbor账户密码 4.Jenkins再次使用GitLab共享库实现前端项目镜像构建 一、实验 1. GitLab修改项目文件与Harbor环境确认 &#xff08;1&#xf…