Cookie与前端安全

2023-10-26

目录

一、Cookie的作用

二、cookie与http协议

1. http响应——cookie的生成

2. http请求——cookie的发送

三、Cookie的属性

1. Expires,Max-Age

2. Domain,Path

3. Secure,HttpOnly

4. SameSite

四、安全

1. csrf攻击

2. xss攻击

五、其他


一、Cookie的作用

1. 介绍

        因为http请求是无状态的,不会记忆之前的信息,前后两次请求是没有关系的。而有些请求需要记录状态,就需要通过Cookie携带信息发送到服务器,从而返回不一样的回应。

        cookie是服务器保存在浏览器的一块文本信息,浏览器每次向服务器发出请求,就会自动附带这段信息。

2. 作用

        cookie用来区分用户、存储用户访问网站的一些信息,使用场景如下:

  • 保存登录状态、购物车、记住密码下次自动登录等功能。  
  • 个性化信息:保存用户的偏好,比如网页的字体大小、背景色等。
  • 记录用户浏览器数据,进行商品推荐。

二、cookie与http协议

1. http响应——cookie的生成

// 该代码会在浏览器保存一个名为foo的cookie,值为bar
Set-Cookie:foo=bar

 (1)如果服务器想在浏览器保存cookie,就要在http响应的头部,放入Set-Cookie字段。http响应可以包含多个Set-Cookie字段,每个Set-Cookie字段也可以包含cookie的多个属性。

// 原信息
Set-Cookie:key1=value1; domain=abc.com; path=/blog
// 修改信息
Set-Cookie:key1=value2; domain=abc.com; path=/blog

(2)如果服务器想改变之前设置的Cookie,必须同时满足4个条件:Cookie的key、domain、path和secure匹配(不是相等)。

2. http请求——cookie的发送

// 向服务器发送名为foo的cookie,值为bar
Cookie:foo=bar

 (1)浏览器向服务器发送http请求时,要在http请求的头部,设置Cookie字段,从而带上相应的Cookie(也就是把之前保存的信息再发送回去)。Cookie字段可以包含多个Cookie。

(2)服务器收到cookie时,有两点是无法知道的:

  • Cookie的各种属性
  • 哪个域名设置的Cookie,到底是一级域名还是二级域名设置的。

三、Cookie的属性

1. Expires,Max-Age

Expires:具体的到期时间。过期后,浏览器就不再保留这个cookie。

Max-Age:从现在开始cookie存在的秒数,优先级高于Expires。

不设置/null:cookie只在当前会话存在,浏览器窗口关闭后,当前session结束,cookie就被删除。

2. Domain,Path

(1)Domain:指定cookie属于哪个域名。以后浏览器向服务器发送请求时,通过该属性判断是否要携带cookie。默认为当前域名。

(2)Domian属性的规则:Domain属性只能是当前域名或当前域名的上级域名,且不能是顶级域名或公共域名,否则浏览器会拒绝设置该cookie。----浏览器发送cookie时,Domain属性必须是当前域名或其上级域名。

(3)Path:指定浏览器发送http请求时,哪些路径要附带这个cookie。只要Path属性是请求路径的开头一部分,就会在头信息中带上这个cookie。(前提是Domain符合条件)

3. Secure,HttpOnly

(1)Secure:指定浏览器只有在https协议下(当设置为true时),才能将cookie发送到服务器。如果当前协议是http,则会忽略secure属性。

(2)HttpOnly:指定该cookie无法通过JS脚本拿到,例如document.cookie、XMLHttpRequest对象都拿不到该属性,只有浏览器发送http请求时才会带上该cookie。可以防止xss攻击,不让cookie被脚本读到。

4. SameSite

(1)用来防止用户追踪和防止csrf攻击

(2)第三方cookie:由第三方网站引导而附带发送的cookie。它不仅会导致csrf攻击,还能用于用户追踪(facebook网站在第三方网站插入一张图片,当浏览器执行该部分代码时,就会向facebook发送带cookie的请求,从而让facebook知道了你是谁,访问了什么网站)。

(3)可以设置的3个值,来限制第三方cookie。

  • Strict:禁止第三方cookie。跨站点时,任何情况下都不会发送cookie。
  • Lax:大多情况下也是禁止第三方cookie,但是导航到目标网站的get请求(包含链接、get表单等)除外。默认值
  • None:关闭SameSite属性,前提是同时设置secure属性,否则无效。

四、安全

1. csrf攻击

        csrf攻击---跨站请求伪造:恶意网站伪造了带有正确cookie的http请求。

        举例:用户登录微博www.weibo.com后,微博服务器会发送一个cookie,用户后来又访问了恶意网站,网站中有www.weibo.com/api(子作用域),那么当用户访问该连接时,微博服务器就会收到带有正确cookie的请求,服务器就会认为是本人在操作,从而导致账号被劫持。

        防御措施:

        (1)设置SameSite:Strict或Lax都可以,让cookie不随第三方网站发出。

        (2)验证token:浏览器发起请求后,服务器会返回一个token。之后每次请求都要同时带上token和cookie才会被认为是合法请求。

2. xss攻击

        xss攻击——跨站脚本攻击:注入恶意script代码到网页中,当用户浏览该页面时,就会执行这些script代码,从而实现恶意攻击。

        常见的有3种类型:

        (1)存储型(持久):恶意代码存储在目标服务器上,当浏览器发送请求时,该恶意代码会随响应报文传回并解析执行。【与反射型的区别在于提交代码是否会存储在服务端】

        场景:用户评论区,提交包含一条恶意代码的评论到数据库,其他用户看到该评论时,恶意代码会随响应报文返回,浏览器解析xss代码。

        (2)反射型(非持久)恶意代码出现在url中,当发请求时会作为输入提交到服务端,然后该恶意代码随响应报文一起传给浏览器,最后浏览器会解析执行该恶意代码。

        (3)DOM型:不经过服务端,通过修改dom节点,把恶意代码插入到了页面。【与后两者的区别在于不经过服务端】

        DOM型属于JS自身的安全漏洞,前两种属于服务端的安全漏洞。

        防御措施:

        (1)HttpOnly:许多xss攻击目标是为了窃取用户cookie,设置httpOnly可以防止JS获取cookie。

        (2)输入检查:对输入内容的<script>等标签进行转义或过滤,转义<>&等字符。

五、其他

1. window.navigator.cookieEnabled:布尔值,表示浏览器是否打开cookie这个功能。

2. document.cookie:返回当前网页的所有cookie(该cookie没有httpOnly属性)。

3. 一般,对于单个域名来说,设置的cookie不应超过30个,每个cookie大小不能超过4KB,超过之后,cookie会被忽略。

4. 区分cookie时不考虑协议和端口。

http://abc.com
https://abc.com
http://abc.com:8080
这3个域名的cookie通用

5. 哪些请求会携带cookie

        浏览器访问某个路径之前,就会找出对该域名domain和路径path有效,并且还没有到期的cookie,一起发送给服务器。

6. 域名

1. 根域名 .
2. 顶级域名(一级域名)
        ·按国家划分:.cn中国,.hk香港
        ·按组织性质划分:.com   .org    .net等
    所有baidu.com是一级域名

3. 二级域名(2个点)
    .baidu.com,.zhihu.com
    www.baidu.com
        
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Cookie与前端安全 的相关文章

  • 使用 querySelector 通过 InnerHTML 选择元素

    有没有办法通过innerHTML选择一个元素而不使用循环 可以使用类似的东西来完成吗 document querySelector div innerHTML Sometext or document querySelector div t
  • 使用 CSS 与使用列和行调整文本区域大小

    使用列和行调整文本区域大小与使用高度和宽度调整文本区域大小有什么区别
  • 如何将输入 type="date" 转换为时间戳?

    我需要转换一个
  • 如何从 type=file 输入中删除“未选择文件”?

    我似乎无法找到任何方法来删除显示在 文件 类型的输入旁边的 未选择文件 文本 你们知道如何删除此文本吗 input type file color transparent Enjoy
  • 为什么我的音频不倒带?

    我在 Javascript 中倒带音频时遇到了一些问题 我基本上有一个倒计时 当倒计时接近结束时 每秒都会发出蜂鸣声 我尝试使用 var bip new Audio http www soundjay com button beep 7 w
  • CSS动画表现

    I have a small hobby project in which I try to build a matrix rain See demo http www audenaerde org matrix html这里 或这个JSF
  • 使用 Javascript/CSS 设置 IE“光学变焦”功能

    我维护的网站的设计相当严格 使用像素来表示字体大小 尺寸 绝对定位等 现在有一个功能请求 要求添加用户调整字体大小的功能 虽然我知道如果不使用相对尺寸从头开始重新设计网站 这是不可能的 但我发现该网站与 IE7 IE8 缩放功能 Ctrl
  • 如何将 HTML 代码转换为 JSON 对象?

    我正在构建一个 Angular 7 应用程序 在此应用程序中 我让用户编辑 HTML 然后我希望将其转换为 JSON 以便以有意义的方式存储它 简而言之 我想获取任何 HTML 代码并将其处理为 JSON 对象 我怎样才能做到这一点 我会将
  • 在将页面发送到客户端之前修改该页面的 HTML

    我需要在将 ASP NET 发送到客户端之前捕获它的 HTML 以便对其进行最后一刻的字符串操作 然后将修改后的版本发送到客户端 e g 页面已加载 每个控件都已正确呈现 页面的完整 html 已准备好传输回客户端 在 ASP NET 中有
  • 未将焦点设置到 Firefox 中的文本字段

    我遇到了一个非常有趣的问题 我正在尝试设置focus在使用 Javascript 的输入字段上 没有 jQuery 我也尝试过但没有成功 使用window onLoad 看看这个小提琴 加载时设置焦点 http jsfiddle net r
  • 从 onclick 函数将方法发布到 URL

    我需要一些听起来很简单但对我来说很难的帮助 所以当有人点击这个 div 时 div Click Me div 我希望它将数据发送到 PHP 文件 该文件将获取我想要的信息 我会使用 GET 函数 但我听说它很容易被破解 如果他们是更简单的解
  • 使用 Bootstrap 粘性导航栏进行 Href 跳转 [重复]

    这个问题在这里已经有答案了 因此 我有一个带有下拉菜单的粘性导航栏 可以让我跳转到页面的不同部分 但是 当我跳转到不同的部分时 导航栏会覆盖我跳转到的 div 的开头 我检查了导航栏 它的高度为 58 带有填充和所有内容 如何将跳转偏移 5
  • 使用 .load() 用图像填充 div 以方便使用 slider1.7

    所以我试图用外部 html 文件中的图像填充幻灯片 div 但问题似乎是新图像确实可以通过 load 拉取 但简单的滑块无法看到新图像 甚至只显示空白尽管在 div 中 有新的图像链接 在我的 html 中 我有这个
  • input[type=hidden] 和visibility="hidden" 之间的区别

    有什么区别input type hidden and visibility hidden 第一个是输入元素 第二个用于 CSS2 中的样式 visibility hidden 可见性属性指定元素是否可见 输入 类型 隐藏 http www
  • 在同一个 UI 元素中整齐地顺序显示不同尺寸的图像

    在我的应用程序中 我需要在其他 UI 元素中显示单个预渲染图像 我希望其他元素紧紧包裹在图像的顶部和底部 显示的图像取决于应用程序的状态 并且图像的大小可能不同 这个问题 https stackoverflow com questions
  • 使用 javascript/jquery 仅选择特定元素后面的文本

    如下面的代码片段所示 我有多个文本 div 其中有粗体部分 然后是换行符 然后是一段文本 我可以 find 粗体部分 但如何使用 javascript jquery 只获取粗体部分后面换行符后面的文本部分 div class thecont
  • 无法读取 null 和其他 null 变量的属性“appendChild”

    在开始之前 我想让您知道我对 Web 开发还很陌生 我还想保留这个 100 javascript 所以现在没有 jquery 或其他语言 以下代码源自该视频 https www youtube com watch v esa5hJegRfI
  • 如何在 Symfony 4 表单的输入上添加占位符?

    在我的 Symfony 4 表单中 我尝试为我的输入获取占位符 我尝试了以下操作 但收到错误消息 表明这是不允许的 有什么想法我还能如何实现这一目标吗 gt add firstname TextType class label gt Vor
  • 网站上出现奇怪的符号(L SEP)?

    我在我的网站上注意到 http www cscc org sg http www cscc org sg 出现了这个奇怪的符号 上面写着 L SEP 在 HTML 代码中 它显示相同的内容 有人可以告诉我如何删除它们吗 那个角色是U 202
  • Javascript/jQuery/等中测量经过时间/一段时间后触发事件的方法

    我正在尝试使用 HTML5 Javascript 制作一个简单的游戏 我想对活动施加时间限制 例如 当玩家进入一个屋顶正在向他们逼近的房间时 我想给他们一些时间来做出决定 然后自动发生其他事件 但是 如果他们做出决定 我根本不希望触发定时功

随机推荐

  • Java文件类型校验之Apache Tika

    一 背景 判断文件类型一般可采用两种方式 1 后缀名判断 简单易操作 但无法准确判断类型 2 文件头信息判断 通常可以判断文件类型 但有些文件类型无法判断 如word和excel头信息的前几个字节是一样的 无法判断 使用apache tik
  • flink watermark 生成机制与总结

    flink watermark 生成机制与总结 watermark 介绍 watermark生成方式 watermark 的生成值算法策略 watermark策略设置代码 watermark源码分析 watermark源码调用流程debug
  • 你知道几种延迟队列的实现方案?

    在开发中 往往会遇到一些关于延时任务的需求 例如 生成订单30分钟未支付 则自动取消 生成订单60秒后 给用户发短信 对上述的任务 我们给一个专业的名字来形容 那就是延时任务 那么这里就会产生一个问题 这个延时任务和定时任务的区别究竟在哪里
  • Reid训练代码之数据集处理

    本篇文章是对yolov5 reid这篇文章训练部分的详解 该项目目录为 config reid输入大小 数据集名称 损失函数等配置 configs 训练时期超参数定义 data 存储数据集和数据处理等代码 以及yolov5类别名称等 eng
  • 怎样更改itunes备份位置_什么是iTunes备份文件?

    由于它是由Apple创建的 因此iTunes改变了用户组织和播放音乐和视频的方式 iTunes已经允许数百万用户通过iTunes Store下载他们喜爱的曲目 歌曲和视频 值得庆幸的是 iTunes拥有一个先进的备份系统 能够备份和恢复Ip
  • Android libdvm.so 与 libart.so

    Android libdvm so 与 libart so 系统升级到5 1之后 发现system lib 下面没有libdvm so了 只剩下了libart so 对于libart模式 从4 4就在Developer optins里面就可
  • FsonFormat Eclipse Plugin 一键解决复杂JSON ,快速实现JavaBean

    简介 当开发人员或者测试人员在开发或者测试接口中 去获取到接口返回的结果值时 都要通过JSONObject和JSONArray解析json结构 然后再通过For循环遍历相应的Key 最后把value值进行App展示或者校验是否预期结果 编写
  • 有关树莓派+arduino构建小车

    这里写自定义目录标题 欢迎使用Markdown编辑器 新的改变 功能快捷键 合理的创建标题 有助于目录的生成 如何改变文本的样式 插入链接与图片 如何插入一段漂亮的代码片 生成一个适合你的列表 创建一个表格 设定内容居中 居左 居右 Sma
  • eclipse中没有runtime environments_Go语言中的panic和recover

    初识别panic和recover 本节将分析两个经常成对出现的关键字 panic 和 recover 这两个关键字都与 defer 有千丝万缕的联系 也都是 Go 语言中的内置函数 但是提供的功能却是互补的 panic 能够改变程序的控制流
  • opencv 图像雾检测_雾的检测算法

    雾的检测算法相对来说文献不是很多 这次和大家介绍两篇相对来说比较容易实现的两篇文章 其中一篇是基于灰度直方图的方式进行分析检测 另一篇是将rgb图像空间转化为hsv空间进行分析检测 1 灰度图检测 首先来说第一片 Fog Detection
  • 如何用ai写文章?这三个软件可以自动生成文章

    随着人工智能技术的不断发展 ai写作已经成为了当今的热门话题 它是指利用机器学习 自然语言处理等技术 让机器能够像人类一样写作 相较于传统写作方式 ai写作大大提高了写作的效率和质量 可以让我们的创意和技术相融合 其应用范围也非常广泛 无论
  • 探索编程世界的宝藏:程序员必掌握的20大算法

    程序员必须掌握哪些算法 文章目录 1 引言 2 冒泡排序算法 编程世界的排序魔法 3 选择排序算法 排序世界的精确挑选器 4 插入排序算法 排序世界的巧妙插珠者 5 快速排序算法 排序世界的分而治之大师 6 归并排序算法 排序世界的合而为一
  • 统计并输出该字符串中26个英文字母

    字符串 第3题 描述 输入一个字符串 统计并输出该字符串中26个英文字母 不区分大小写 出现的次数 输入 输入一个字符串 输出 分行输出26个英文字母 不区分大小写 出现的次数 输入示例 I am a student 输出示例 a 2 d
  • Python:蒙特卡罗方法模拟解决三门问题

    蒙特卡罗方法与三门问题 蒙特 卡罗方法 Monte Carlo method 也称统计模拟方法 是一种统计学的方法 模拟方法 通过大量随机样本模拟问题 从而获得所要计算的值 三门问题 三门问题 Monty Hall problem 亦称为蒙
  • STM32:TIM_OCxInit函数用法解释

    TIM OC3Init函数是用于初始化定时器TIM的PWM输出通道3的函数 可以使用以下步骤进行使用 创建一个TIM OC InitTypeDef类型的结构体对象 例如命名为TIM OCInitStruct 使用TIM OCStructIn
  • 网络基础知识总结

    一 广域网和局域网 局域网 Local Area Network 简称LAN 也就是内网 局域网就是在固定的一个地理区域内由2台以上的电脑用网线和其他网络设备搭建而成的一个封闭的计算机组 它可以是邻居之间的2台电脑 也可以是一幢100层大楼
  • [深入研究4G/5G/6G专题-41]: URLLC-12-《3GPP URLLC相关协议、规范、技术原理深度解读》-6-MAC层调度器的总体架构、调度器的原理和三种URLLC调度器的增强方案

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文主页 https blog csdn net HiWangWenBing article details 125942872 目录 前言
  • 杭电ACM 1000题

    import java util Scanner public class Main public static void main String args Scanner cin new Scanner System in while c
  • ajax 跨域 session 丢失问题

    ajax 跨域时session丢失了 解决方法 首先我 Google 了一下这个问题的原因 我找到了这个 1 Access Control Allow Origin该字段是必须的 它的值要么是请求时Origin字段的值 要么是一个 表示接受
  • Cookie与前端安全

    目录 一 Cookie的作用 二 cookie与http协议 1 http响应 cookie的生成 2 http请求 cookie的发送 三 Cookie的属性 1 Expires Max Age 2 Domain Path 3 Secur