当前位置: 首页 > news >正文

浏览器安全(同源策略及浏览器沙箱)

一、同源策略(Same Origin Policy)

1.定义

    同源策略(Same - origin Policy)是一种浏览器的安全机制。它规定一个网页的脚本只能访问和操作与它同源的资源。这里的 “源” 包括协议(如 http、https)、域名(如example.com)和端口(如 80、443)。只有当这三个部分完全相同的时候,两个资源才被认为是同源的。

例如:

http://www.example.com:8080https://www.example.com:8080

不是同源的,因为协议不同;

http://www.example.com:80http://www.example2.com:80

不是同源的,因为域名不同;

http://www.example.com:80http://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 特性进行安全性评估,确保这些特性在沙箱环境中不会被滥用 。

http://www.lryc.cn/news/522137.html

相关文章:

  • w~Transformer~合集11
  • Coursera四门课备考入学考试
  • Flink(八):DataStream API (五) Join
  • HarmonyOS NEXT边学边玩:从零实现一个影视App(六、视频播放页的实现)
  • salesforce实现一个字段的默认初始值根据另一个字段的值来自动确定
  • Linux 文件权限详解
  • 【混合开发】CefSharp+Vue桌面应用程序开发
  • springBoot项目使用Elasticsearch教程
  • 模型 多元化思维(系统科学)
  • Google地图瓦片爬虫
  • 【C++】size_t全面解析与深入拓展
  • Web端实时播放RTSP视频流(监控)
  • 学习 Git 的工作原理,而不仅仅是命令
  • C语言变长嵌套数组常量初始化定义技巧
  • 如何查看特定版本的Spring源码
  • 【深度学习】关键技术-激活函数(Activation Functions)
  • 网关相关知识
  • SpringBoot整合SpringSecurity详解
  • 【C++基础】enum,union,uint8_t,static
  • 单片机的原理及其应用:从入门到进阶的全方位指南
  • 如何使用 Go语言操作亚马逊 S3 对象云存储
  • 2025年应用与API安全展望:挑战与机遇并存
  • Linux安装docker,安装配置xrdp远程桌面
  • VD:生成a2l文件
  • 【SpringBoot应用篇】SpringBoot+MDC+自定义Filter操作traceId实现日志链路追踪
  • unity2022以上导出到AndroidStudio后更新步骤
  • 【ArcGIS初学】产生随机点计算混淆矩阵
  • Harmony面试模版
  • PCM5142集成32位384kHz PCM音频立体声114dB差分输出DAC编解码芯片
  • 浪潮云财务系统xtdysrv.asmx存在命令执行漏洞