浏览器安全(同源策略及浏览器沙箱)
一、同源策略(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 结构,用来自定义可以灵活变更的数据结构。它内部…...
Flask RESTful 示例
目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...
docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
Java 8 Stream API 入门到实践详解
一、告别 for 循环! 传统痛点: Java 8 之前,集合操作离不开冗长的 for 循环和匿名类。例如,过滤列表中的偶数: List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...
dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...
MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...
零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
分布式增量爬虫实现方案
之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...
佰力博科技与您探讨热释电测量的几种方法
热释电的测量主要涉及热释电系数的测定,这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中,积分电荷法最为常用,其原理是通过测量在电容器上积累的热释电电荷,从而确定热释电系数…...
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...
回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...
