浏览器安全(同源策略及浏览器沙箱)
一、同源策略(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 结构,用来自定义可以灵活变更的数据结构。它内部…...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...
Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...
全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...
优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...
10-Oracle 23 ai Vector Search 概述和参数
一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation &#…...
C/C++ 中附加包含目录、附加库目录与附加依赖项详解
在 C/C 编程的编译和链接过程中,附加包含目录、附加库目录和附加依赖项是三个至关重要的设置,它们相互配合,确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中,这些概念容易让人混淆,但深入理解它们的作用和联…...
规则与人性的天平——由高考迟到事件引发的思考
当那位身着校服的考生在考场关闭1分钟后狂奔而至,他涨红的脸上写满绝望。铁门内秒针划过的弧度,成为改变人生的残酷抛物线。家长声嘶力竭的哀求与考务人员机械的"这是规定",构成当代中国教育最尖锐的隐喻。 一、刚性规则的必要性 …...
uni-app学习笔记三十五--扩展组件的安装和使用
由于内置组件不能满足日常开发需要,uniapp官方也提供了众多的扩展组件供我们使用。由于不是内置组件,需要安装才能使用。 一、安装扩展插件 安装方法: 1.访问uniapp官方文档组件部分:组件使用的入门教程 | uni-app官网 点击左侧…...
