浏览器安全(同源策略及浏览器沙箱)
一、同源策略(Same Origin Policy)
1.定义
同源策略(Same - origin Policy)是一种浏览器的安全机制。它规定一个网页的脚本只能访问和操作与它同源的资源。这里的 “源” 包括协议(如 http、https)、域名(如example.com)和端口(如 80、443)。只有当这三个部分完全相同的时候,两个资源才被认为是同源的。
例如:
http://www.example.com:8080和https://www.example.com:8080
不是同源的,因为协议不同;
http://www.example.com:80和http://www.example2.com:80
不是同源的,因为域名不同;
http://www.example.com:80和http://www.example.com:8080
不是同源的,因为端口不同。
2.作用
(1)防止恶意脚本攻击
假如没有同源策略,当用户访问一个正规的银行网站(如https://bank.com)时,一个恶意脚本可能会被注入到页面中。这个恶意脚本可以来自其他非同源的恶意网站(如http://malicious.com)。它可能会通过 JavaScript 代码,窃取用户在银行网站上输入的账号和密码信息,然后发送给恶意服务器。
(2)保护用户隐私和数据安全
它限制了跨源访问用户的敏感数据,如本地存储(LocalStorage)和会话存储(SessionStorage)中的数据。如果没有同源策略,任何网站都可以访问用户在其他网站存储的数据,这将对用户隐私造成巨大威胁。
3.跨源访问的限制情况
(1)DOM 访问限制
一个网页中的 JavaScript 代码通常不能直接访问和操作不同源网页的 DOM(文档对象模型)元素。例如,不能从http://siteA.com的页面中通过 JavaScript 获取http://siteB.com页面中的 HTML 元素并修改它们。
(2)AJAX 请求限制
XMLHttpRequest(XHR)和 fetch 等用于在网页中发送异步请求的技术,默认情况下也受到同源策略的限制。这意味着如果一个网页(如http://frontend.com)想要通过 XHR 或 fetch 向另一个不同源的服务器(如http://backend.com)获取数据,浏览器会阻止这个请求。
4.跨源资源共享(CORS)作为同源策略的补充
(1)简单请求和非简单请求
① 简单请求
是指满足一定条件的请求,如请求方法是 GET、POST 或 HEAD,并且请求头中只有一些简单的字段(如 Accept、Accept - Language、Content - Language 等)。对于简单请求,浏览器会在请求头中自动添加一个Origin字段,表明请求来自哪个源。服务器在收到请求后,如果允许这个源访问,可以在响应头中添加Access - Control - Allow - Origin字段,值为请求的源或者*(表示允许任何源访问),这样浏览器就会允许客户端接收这个响应。
② 非简单请求
(如使用 PUT、DELETE 方法,或者有自定义的请求头等情况),浏览器会先发送一个预检请求(OPTIONS 请求)。这个预检请求会询问服务器是否允许真正的请求发送。服务器需要在响应头中返回允许的方法、请求头和源等信息,只有当预检请求得到允许后,浏览器才会发送真正的请求。
(2)JSONP 作为跨源访问的另一种方式(有局限性)
JSONP(JSON with Padding)是一种通过动态创建<script>标签来绕过同源策略的方式。它利用了<script>标签可以加载不同源脚本的特性。但是 JSONP 只能用于获取数据,并且存在安全风险,因为它会执行返回的 JavaScript 代码,容易受到跨站脚本攻击(XSS)。
二、浏览器沙箱
1. 定义
浏览器沙箱是一种安全机制,它为浏览器中的各种网页内容,如 JavaScript 代码、插件等,创建一个隔离的运行环境。在这个环境中,运行的程序被限制在特定范围内,无法对外部系统或其他沙箱环境造成破坏。这就好比在一个密封的 “沙箱” 内进行游戏,里面的活动不会影响到沙箱之外的世界。
2. 目的
(1)防止恶意软件传播
当用户访问包含恶意脚本或插件的网页时,沙箱能有效阻止恶意代码感染用户计算机系统。例如,恶意 JavaScript 代码试图修改系统文件植入病毒或窃取数据,在沙箱环境下,由于其被限制在特定区域,无法访问计算机关键系统资源,如文件系统(除特定缓存区域)、操作系统内核等,从而保障了系统安全。
(2)保护系统安全和稳定
沙箱可隔离不同网页内容。若一个网页因代码错误或恶意攻击崩溃,沙箱确保该崩溃不会影响浏览器其他标签页或整个浏览器运行。比如在多标签页浏览器中,一个标签页运行的复杂 JavaScript 应用出现无限循环错误,在沙箱机制下,仅该标签页失去响应,不会导致整个浏览器冻结。
3. 工作原理
(1)资源隔离
①内存空间独立分配
浏览器沙箱为每个网页或插件分配独立内存空间。以网页 A 和网页 B 为例,网页 A 运行的脚本只能在为其分配的内存中操作变量和数据结构,无法访问网页 B 的内存区域,各内存空间相互独立,如同一个个独立的房间。
②文件系统访问限制
沙箱对文件系统访问仅允许有限且安全的操作。浏览器通常允许沙箱中的代码在临时缓存目录读取和写入小文件,用于存储网页缓存数据,如图片、脚本缓存等,但禁止访问用户重要文档文件夹或系统配置文件。
(2)权限限制
沙箱严格限制代码权限。以网络访问控制为例,沙箱中的代码在未获用户明确授权或不符合浏览器安全策略时,不能随意发起网络连接。例如,网页中的 JavaScript 代码不能自动向未经授权的外部服务器发送敏感用户数据。同时,对于修改系统注册表(Windows 系统)或安装新软件等高风险操作,沙箱内代码绝对禁止执行。
(3)进程隔离(在某些浏览器架构中)
部分现代浏览器采用进程隔离技术增强沙箱安全性,如将每个标签页或插件运行在独立进程中。若一个进程(如被恶意脚本攻击的标签页进程)出现问题,浏览器可轻松终止该进程,而不影响其他进程(其他正常标签页或浏览器核心进程)。这如同将不同危险物品置于不同密封容器,一个容器爆炸(进程崩溃)不会波及其他容器。
4. 沙箱在不同浏览器中的应用
(1)谷歌 Chrome 浏览器
Chrome 运用多进程架构实现沙箱,每个标签页、插件和扩展程序都运行在独立进程中。这种架构安全性强,即使一个进程遭受攻击,其他进程仍能安全运行。此外,Chrome 对 JavaScript 等代码进行严格权限管理,限制其在沙箱中的活动范围。
(2)Mozilla Firefox 浏览器
Firefox 同样具备沙箱机制,采用内存隔离和权限限制等多种技术隔离网页内容。其沙箱会不断更新改进以应对新安全威胁。例如,对新的 JavaScript 特性进行安全性评估,确保这些特性在沙箱环境中不会被滥用 。
相关文章:
浏览器安全(同源策略及浏览器沙箱)
一、同源策略(Same Origin Policy) 1.定义 同源策略(Same - origin Policy)是一种浏览器的安全机制。它规定一个网页的脚本只能访问和操作与它同源的资源。这里的 “源” 包括协议(如 http、https)、域名&…...
w~Transformer~合集11
我自己的原文哦~ https://blog.51cto.com/whaosoft/12472192 #LightSeq 最高加速9倍!字节跳动开源8比特混合精度Transformer引擎,近年来,Transformer 已经成为了 NLP 和 CV 等领域的主流模型,但庞大的模型参数限制了它的高效训练和推理。…...
Coursera四门课备考入学考试
某学校入学考试复习用,刷到的话纯靠缘分,不方便回答多余问题 (博主本人waive掉了没有考过,但还是基本都学完了) 记录学习coursera的四门课(顺序Py在DS前,其他无所谓) Mathematics fo…...
Flink(八):DataStream API (五) Join
1. Window Join Window join 作用在两个流中有相同 key 且处于相同窗口的元素上。这些窗口可以通过 window assigner 定义,并且两个流中的元素都会被用于计算窗口的结果。两个流中的元素在组合之后,会被传递给用户定义的 JoinFunction 或 FlatJoinFunct…...
HarmonyOS NEXT边学边玩:从零实现一个影视App(六、视频播放页的实现)
在HarmonyOS NEXT中,ArkUI是一个非常强大的UI框架,能够帮助开发者快速构建出美观且功能丰富的用户界面。本文将详细介绍如何使用ArkUI实现一个影视App的视频播放页面。将从零开始,逐步构建一个功能完善的视频播放页面,并解释每一部…...
salesforce实现一个字段的默认初始值根据另一个字段的值来自动确定
在 Salesforce 中,可以通过 公式字段 或 触发器 (Trigger) 实现字段的默认初始值根据另一个字段的值来自动确定,具体实现方法如下: 1. 使用公式字段 公式字段是一种动态字段,值会根据公式实时计算。 步骤: 导航到字段…...
Linux 文件权限详解
目录 前言 查看文件权限 修改文件权限 符号方式 数字方式 前言 Linux 文件权限是系统中非常重要的概念之一,用于控制对文件和目录的访问。权限分为读(Read)、写(Write)、执行(Execute)三个…...
【混合开发】CefSharp+Vue桌面应用程序开发
为什么选择CefSharpVue做桌面应用程序 CefSharp 基于 Chromium Embedded Framework (CEF) ,它可以将 Chromium 浏览器的功能嵌入到 .NET 应用程序中。通过 CefSharp,开发者可以在桌面应用程序中集成 Web 技术,包括 HTML、JavaScript、CSS 等…...
springBoot项目使用Elasticsearch教程
目录 一、引言(一)使用背景(二)版本库区别 二、引入依赖(一)springboot集成的es依赖(建议)(二)es提供的客户端库 三、配置(以yaml文件为例&#x…...
模型 多元化思维(系统科学)
系列文章分享模型,了解更多👉 模型_思维模型目录。融合多学科知识,全面解决问题。 1 多元化思维模型的应用 1.1 完美日记的私域流量运营 完美日记作为美妆行业的新兴品牌,通过多元化的思维模型在私域流量运营中取得了显著成功。…...
Google地图瓦片爬虫
地图地址说明 1、谷歌矢量(中文标注) http://mt{0-3}.google.cn/vt/vm416115521&hlzh-CN&glcn&x{x}&y{y}&z{z}&sGalileo 2、谷歌矢量(英文标注) http://mt{0-3}.google.cn/vt/vm416115521&hlen&glcn&x{x}&y{y}&z{z}&sGali…...
【C++】size_t全面解析与深入拓展
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯一、什么是size_t?为什么需要size_t? 💯二、size_t的特性与用途1. size_t是无符号类型示例: 2. size_t的跨平台适应性示例对…...
Web端实时播放RTSP视频流(监控)
一、安装ffmpeg: 1、官网下载FFmpeg: Download FFmpeg 2、点击Windows图标,选第一个:Windows builds from gyan.dev 3、跳转到下载页面: 4、下载后放到合适的位置,不用安装,解压即可: 5、配置path 复制解压后的\bin路径,配置环境变量如图: <...
学习 Git 的工作原理,而不仅仅是命令
Git 是常用的去中心化源代码存储库。它是由 Linux 创建者 Linus Torvalds 创建的,用于管理 Linux 内核源代码。像 GitHub 这样的整个服务都是基于它的。因此,如果您想在 Linux 世界中进行编程或将 IBM 的 DevOps Services 与 Git 结合使用,那…...
C语言变长嵌套数组常量初始化定义技巧
有时候,我们需要在代码里配置一些常量结构,比如一个固定的动作流程ActionFlow:包含N(即flow_num)个动作列表(ActionArray),每个动作列表包含M(即act_num)个可…...
如何查看特定版本的Spring源码
写在前面:大家好!我是晴空๓。如果博客中有不足或者的错误的地方欢迎在评论区或者私信我指正,感谢大家的不吝赐教。我的唯一博客更新地址是:https://ac-fun.blog.csdn.net/。非常感谢大家的支持。一起加油,冲鸭&#x…...
【深度学习】关键技术-激活函数(Activation Functions)
激活函数(Activation Functions) 激活函数是神经网络的重要组成部分,它的作用是将神经元的输入信号映射到输出信号,同时引入非线性特性,使神经网络能够处理复杂问题。以下是常见激活函数的种类、公式、图形特点及其应…...
网关相关知识
文章目录 什么是网关网关的主要作用网关的运用 什么是网关 网关又称网间连接器、协议转换器,也就是网段(局域网、广域网)关卡,不同网段中的主机不能直接通信,需要通过关卡才能进行互访,比如IP地址为192.168.31.9(子网掩码&#x…...
SpringBoot整合SpringSecurity详解
文章目录 SpringBoot整合SpringSecurity详解一、引言二、引入依赖三、配置 Spring Security四、自定义用户详细信息服务五、使用示例1. 创建用户实体类2. 测试登录功能 六、总结 SpringBoot整合SpringSecurity详解 一、引言 在当今的软件开发中,安全是一个至关重要…...
【C++基础】enum,union,uint8_t,static
enum 所以有时候使用 Enum 的目的,不是为了自定义一种数据类型,而是为了声明一组常量。 from: https://github.com/wangdoc/clang-tutorial/blob/main/docs/enum.md union C 语言提供了 Union 结构,用来自定义可以灵活变更的数据结构。它内部…...
第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...
PHP和Node.js哪个更爽?
先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...
【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例
文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...
Matlab | matlab常用命令总结
常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...
JS设计模式(4):观察者模式
JS设计模式(4):观察者模式 一、引入 在开发中,我们经常会遇到这样的场景:一个对象的状态变化需要自动通知其他对象,比如: 电商平台中,商品库存变化时需要通知所有订阅该商品的用户;新闻网站中࿰…...
基于Springboot+Vue的办公管理系统
角色: 管理员、员工 技术: 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能: 该办公管理系统是一个综合性的企业内部管理平台,旨在提升企业运营效率和员工管理水…...
「全栈技术解析」推客小程序系统开发:从架构设计到裂变增长的完整解决方案
在移动互联网营销竞争白热化的当下,推客小程序系统凭借其裂变传播、精准营销等特性,成为企业抢占市场的利器。本文将深度解析推客小程序系统开发的核心技术与实现路径,助力开发者打造具有市场竞争力的营销工具。 一、系统核心功能架构&…...
