浏览器安全(同源策略及浏览器沙箱)
一、同源策略(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 结构,用来自定义可以灵活变更的数据结构。它内部…...

单片机的原理及其应用:从入门到进阶的全方位指南
以下是一篇详细、深入的“单片机的原理及其应用”博客文章示例,适合想要系统学习或深入了解单片机的读者。文中不仅会介绍单片机的基本原理、内部构造、开发流程和应用领域,还会融入更多的理论分析、实操案例以及常见问题与解决思路等,帮助读…...

如何使用 Go语言操作亚马逊 S3 对象云存储
以下是使用 Go 语言操作亚马逊 S3 对象云存储的详细步骤和示例代码: 解决思路: 安装必要的 Go 语言包,这里我们将使用 aws-sdk-go 包来与 Amazon S3 进行交互。配置 AWS 凭证,包括访问密钥和秘密访问密钥,以及 AWS 区…...

2025年应用与API安全展望:挑战与机遇并存
进入2025年,应用与API安全的重要性愈发突出。在过去的一年里,API技术已经成为数字创新的核心。然而,API的大规模应用也使得攻击面显著扩展,2024年针对业务逻辑漏洞的API攻击占比高达27%,较前一年增加10%。与此同时&…...

Linux安装docker,安装配置xrdp远程桌面
Linux安装docker,安装配置xrdp远程桌面。 1、卸载旧版本docker 卸载旧版本docker命令 yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine现在就是没有旧版本的d…...

VD:生成a2l文件
目录 前言Simulink合并地址 ASAP2 editor 前言 我之前的方法都是通过Simulink模型生成代码的过程中顺便就把a2l文件生成出来了,这时的a2l文件还没有地址,所以紧接着会去通过elf文件更新地址,一直以为这是固定的流程和方法,今天无…...

【SpringBoot应用篇】SpringBoot+MDC+自定义Filter操作traceId实现日志链路追踪
【SpringBoot应用篇】SpringBootMDC自定义Filter操作traceId实现日志链路追踪 解决的问题解决方案MDC具体逻辑ymllogback-spring.xmlTraceIdUtil操作工具类TraceIdFilter自定义过滤器GlobalExceptionHandler全局异常处理类TraceIdAspect切面UserController测试验证 多线程处理M…...

unity2022以上导出到AndroidStudio后更新步骤
1、unity里面Export出unityLibrary 2、导出apk,里面才包含libil2cpp(新版unity无法直接导出libil2cpp 3、注释AS项目app下的build.gradle里面包含unityLibrary的代码 4、注释AS项目settings.gradle包含unityLibrary的代码 5、删除AS项目里面的unityLibrary文件夹 6、…...

【ArcGIS初学】产生随机点计算混淆矩阵
混淆矩阵:用于比较分类结果和地表真实信息 总体精度(overall accuracy) :指对角线上所有样本的像元数(正确分类的像元数)除以所有像元数。 生产者精度(producers accuracy) :某类中正确分类的像元数除以参考数据中该类的像元数(列方向),又称…...

Harmony面试模版
1. 自我介绍 看表达能力、沟通能力 面试记录: 2. 进一步挖掘 2.1. 现状 目前是在职还是离职,如果离职,从上一家公司离职的原因 2.2. 项目经验 如果自我介绍工作项目经验讲的不够清楚,可以根据简历上的信息再进一步了解 面试记…...

PCM5142集成32位384kHz PCM音频立体声114dB差分输出DAC编解码芯片
目录 PCM5142 简介PCM5142功能框图PCM5142特性 参考原理图 PCM5142 简介 PCM514x 属于单片 CMOS 集成电路系列,由立体声数模转换器 (DAC) 和采用薄型小外形尺寸 (TSSOP) 封装的附加支持电路组成。PCM514x 使用 TI 最新一代高级分段 DAC 架构产品,可实现…...