跳转至

浏览器原理与安全

浏览器原理与安全

本章导读:本章深入浏览器内核架构(渲染引擎、JavaScript 引擎)、渲染流程、同源策略、Cookie 与存储机制、沙箱安全模型,以及浏览器层面的攻击面分析。

浏览器架构与渲染引擎

浏览器是用户访问 Web 的核心客户端软件,其内部架构复杂,主要组件包括:

浏览器核心组件

组件 职责 安全意义
用户界面(UI) 地址栏、书签栏、前进/后退按钮、菜单等 地址栏是用户判断网站身份的第一道防线,钓鱼攻击常伪造相似域名
浏览器引擎(Browser Engine) 协调 UI 与渲染引擎,处理用户输入、资源加载调度 控制页面导航、同源策略执行
渲染引擎(Rendering Engine) 解析 HTML/CSS/JavaScript,构建 DOM/CSSOM,渲染页面 解析漏洞可导致 XSS、内存损坏(Use-After-Free)
JavaScript 引擎 执行 JS 代码。V8(Chrome)、SpiderMonkey(Firefox)、JavaScriptCore(Safari) JIT 编译漏洞(如 CVE-2021-21220 V8 类型混淆)
网络层(Networking) 处理 HTTP/HTTPS/WebSocket 请求,管理连接、缓存、Cookie 网络层是 MITM 攻击的目标,TLS 握手在此完成
数据持久化层 Cookie、LocalStorage、IndexedDB、缓存、历史记录 存储敏感信息,是 XSS 窃取的目标
GPU 进程 硬件加速渲染、Canvas 2D/3D、WebGL GPU 进程隔离不当可导致沙箱逃逸

主流渲染引擎对比

浏览器 渲染引擎 JavaScript 引擎 特点
Google Chrome / Edge Blink(WebKit 分支) V8 市场份额最高,多进程架构,Site Isolation
Mozilla Firefox Gecko SpiderMonkey 开源,隐私保护功能强,Rust 重构组件
Apple Safari WebKit JavaScriptCore(Nitro) Apple 生态集成,iOS 强制使用
旧版 Internet Explorer Trident Chakra 已淘汰,历史漏洞众多
APP 内置浏览器 多为 WebView(Blink/WebKit) 系统自带引擎 更新滞后,安全补丁不及时,攻击面大

多进程架构(以 Chrome 为例)

  • Browser 进程:主进程,管理 UI、Tab、扩展、网络请求调度

  • Renderer 进程:每个 Tab/站点一个独立进程(Site Isolation 后每个 iframe 也可能独立),运行渲染引擎和 JS 引擎。Renderer 进程运行在沙箱(Sandbox)中,限制对系统资源的访问

  • GPU 进程:处理 GPU 相关任务,所有 Tab 共享

  • Plugin 进程:插件(如 Flash,已淘汰)独立进程

  • Utility 进程:音频、网络服务、存储服务等辅助进程

  • 安全意义:进程隔离防止一个页面的漏洞影响其他页面或系统;Renderer 沙箱即使被攻破,攻击者仍需突破沙箱才能访问系统资源

浏览器核心功能详解

网络请求流程

  1. URL 解析:解析协议、域名、端口、路径、查询参数

  2. DNS 解析:查询域名对应的 IP 地址(本地缓存 → hosts → DNS 服务器)

  3. 建立连接:TCP 三次握手(HTTP)或 TLS 握手(HTTPS)

  4. 发送请求:构造 HTTP 请求报文,添加 Cookie、User-Agent 等头部

  5. 接收响应:解析响应状态码、头部、Body

  6. 资源加载:HTML 中引用的 CSS、JS、图片、字体等资源并行加载(受同源策略和 CSP 限制)

HTML/CSS/JS 解析与渲染管线

  1. 解析 HTML → DOM 树:词法分析(Tokenization)→ 语法分析(Tree Construction)。遇到 <script> 时默认阻塞解析(async/defer 可改变行为)

  2. 解析 CSS → CSSOM 树:将样式规则转换为结构化表示

  3. 执行 JavaScript:JS 可修改 DOM 和 CSSOM,触发重新解析和样式计算

  4. 合并 DOM + CSSOM → 渲染树(Render Tree):只包含可见节点

  5. 布局(Layout/Reflow):计算每个节点的几何信息(位置、大小)

  6. 绘制(Paint):将渲染树绘制为屏幕像素

  7. 合成(Composite):将不同图层合成最终图像,使用 GPU 加速

浏览器存储机制

存储类型 容量 生命周期 作用域 安全测试关注点
Cookie 约 4KB 由 Expires/Max-Age 控制,会话 Cookie 关闭浏览器即删除 域名+路径 HttpOnly 防 XSS 窃取、Secure 防 MITM、SameSite 防 CSRF
LocalStorage 约 5-10MB 持久存储,需手动清除 同源(协议+域名+端口) XSS 可读取其中存储的敏感信息(如 Token)
SessionStorage 约 5-10MB 页面会话级,关闭标签页即删除 同源,标签页隔离 比 LocalStorage 更安全,但仍受 XSS 影响
IndexedDB 较大(数百 MB,用户授权后更大) 持久存储 同源 可存储结构化数据,XSS 可读取
Cache API / Service Worker 较大 由 Service Worker 控制 同源 缓存投毒可导致持久化 XSS

浏览器安全机制

同源策略(Same-Origin Policy, SOP)

  • 浏览器的核心安全机制,限制不同源(协议 + 域名 + 端口)的文档或脚本之间的交互

  • 同源可自由交互;跨源受限:

  • 可加载跨源资源(图片、CSS、JS、iframe),但 JS 无法读取跨源 iframe 内容、无法读取跨源响应(CORS 除外)

  • 可发送跨源请求(如 <form><img>),但无法读取响应(除非 CORS 允许)

  • 安全测试关注点:SOP 绕过漏洞(如 document.domain 放宽、JSONP 劫持、CORS 配置错误)

内容安全策略(Content Security Policy, CSP)

  • 通过 HTTP 头部或 <meta> 标签声明页面可加载的资源来源,是防御 XSS 的重要手段

  • 常用指令:

  • default-src 'self':默认只允许同源资源

  • script-src 'self' 'nonce-abc123' 'sha256-...':限制 JS 来源,禁止内联脚本(除非带 nonce 或 hash)

  • style-src 'self':限制 CSS 来源

  • img-src *:允许任意来源图片

  • connect-src 'self':限制 XHR/Fetch/WebSocket 连接目标

  • frame-ancestors 'none':禁止页面被嵌入 iframe(防御点击劫持)

  • form-action 'self':限制表单提交目标

  • base-uri 'self':限制 <base> 标签的 href

  • 安全测试关注点:CSP 绕过技术(unsafe-inlineunsafe-eval 削弱策略;通过 JSONP 端点、Angular 模板、旧版 IE 的 expression() 等绕过)

浏览器沙箱(Sandbox)

  • Renderer 进程运行在受限环境中,通过操作系统机制(Windows 的 ACL/Linux 的 seccomp-bpf/macOS 的 Seatbelt)限制系统调用

  • 沙箱逃逸(Sandbox Escape)是浏览器漏洞利用链的关键环节:先通过渲染引擎漏洞(如 V8 类型混淆)在 Renderer 内执行代码,再突破沙箱获取系统权限

  • 典型案例:Chrome 沙箱逃逸漏洞链(CVE-2021-21220 V8 漏洞 + CVE-2021-21224 Windows 内核漏洞)

Site Isolation(站点隔离)

  • Chrome 67+ 引入,将不同站点的页面放在独立的 Renderer 进程中,即使一个 Renderer 进程被攻破,也无法访问其他站点的数据

  • 基于 MIME 类型和 Origin 判断,对跨站 iframe 强制进程隔离

  • 安全意义:大幅降低了 Universal XSS(UXSS)和 Spectre 攻击的风险

其他安全机制

  • HSTS(HTTP Strict Transport Security):强制浏览器仅通过 HTTPS 访问域名,防止 SSL 剥离攻击

  • X-Frame-Options / CSP frame-ancestors:防御点击劫持

  • X-Content-Type-Options: nosniff:禁止 MIME 类型嗅探,防御上传漏洞利用

  • Referrer-Policy:控制 Referer 头发送策略,减少信息泄露

  • Permissions-Policy:控制浏览器特性权限(摄像头、麦克风、地理位置等)

开发者工具与安全测试

浏览器开发者工具(DevTools)是安全测试的重要辅助工具:

Elements 面板

  • 查看和实时编辑 DOM 结构、CSS 样式

  • 安全测试用途:检查 XSS 输出点的 HTML 编码情况;验证 CSP 是否阻止了恶意资源加载;检查 iframe 的 sandbox 属性

Console 面板

  • 执行 JavaScript 代码,查看日志和错误信息

  • 安全测试用途:测试 XSS Payload 执行效果;检查 document.cookie 是否可读取(验证 HttpOnly);测试原型链污染;执行 DOM 操作验证漏洞

Network 面板

  • 监控所有网络请求,查看请求/响应头、Body、Cookie、Timing

  • 安全测试用途:

  • 检查敏感信息是否通过 HTTP 明文传输(应使用 HTTPS)

  • 审查响应头(CSP、HSTS、X-Frame-Options 等安全头是否缺失)

  • 分析 Cookie 的 Secure、HttpOnly、SameSite 属性

  • 检查 API 响应中是否包含敏感数据(如密码哈希、内部 IP)

  • 重放请求(右键 → Copy as cURL,或 Burp Suite 拦截)

Application 面板

  • 查看 Cookie、LocalStorage、SessionStorage、IndexedDB、Cache、Service Worker

  • 安全测试用途:检查存储的敏感信息(Token、用户数据);验证 Cookie 安全属性;检查 Service Worker 是否可被恶意注册(持久化 XSS)

Security 面板

  • 查看当前页面的安全信息:HTTPS 证书详情、TLS 版本、混合内容(Mixed Content)警告

  • 安全测试用途:检查证书是否有效、是否使用弱 TLS 版本、是否存在 HTTP 资源加载到 HTTPS 页面(混合内容)

Sources 面板

  • 调试 JavaScript 代码,设置断点、单步执行

  • 安全测试用途:分析前端逻辑,寻找 DOM 型 XSS 注入点;检查前端密钥硬编码;分析混淆/压缩后的 JS 代码

浏览器安全测试关联点

  • XSS(Cross-Site Scripting):浏览器是 XSS 攻击的执行环境

  • 反射型 XSS:恶意链接中的脚本被服务器回显,浏览器执行。测试:在 URL 参数中注入 <script>alert(document.domain)</script>,观察是否弹窗

  • 存储型 XSS:恶意脚本存储在服务器,所有浏览者触发。测试:在评论、个人资料等持久化输入点注入 Payload

  • DOM 型 XSS:纯前端漏洞,JS 通过 location.hashinnerHTMLdocument.writeeval() 等将用户输入插入页面。测试:分析 JS 代码,追踪用户输入到危险 sink 函数的数据流

  • Self-XSS:诱导用户在 Console 中粘贴执行恶意代码,结合社会工程学利用

  • 工具:XSStrike(自动化 XSS 检测)、DOM Invader(Burp Suite 插件,检测 DOM XSS)、BeEF(浏览器漏洞利用框架)

  • CSRF(Cross-Site Request Forgery):利用浏览器自动携带 Cookie 的机制,诱导用户访问恶意页面执行非预期操作

  • 测试:构造自动提交的表单或 <img> 标签,检查目标操作是否在无额外验证(CSRF Token、SameSite Cookie)的情况下执行

  • 防御:CSRF Token、SameSite Cookie(Strict/Lax)、Referer 验证、双重 Cookie

  • 点击劫持(Clickjacking):通过透明 iframe 覆盖恶意页面,诱导用户点击目标网站的按钮

  • 测试:构造包含目标网站的 iframe,设置 opacity: 0,验证是否可点击触发敏感操作

  • 防御:X-Frame-Options: DENY/SAMEORIGIN、CSP frame-ancestors 'none'

  • 浏览器插件/扩展安全

  • 恶意扩展可读取所有页面内容、修改请求响应、窃取 Cookie

  • 扩展权限过高(如 webRequesttabscookies)可导致大规模数据泄露

  • 历史案例:Great Suspender 扩展被出售后植入恶意代码、多个流行扩展被劫持发布恶意版本

  • 隐私泄露

  • 指纹识别(Browser Fingerprinting):通过 Canvas、WebGL、字体、时区、屏幕分辨率等组合唯一标识用户,绕过 Cookie 追踪限制

  • WebRTC 泄露真实 IP:即使使用 VPN,WebRTC 可能泄露本地 IP 地址

  • 时区/语言泄露地理位置:通过 Intl.DateTimeFormat().resolvedOptions().timeZone 推断用户所在地区

  • 浏览器漏洞 CVE

  • Chrome:CVE-2021-21220(V8 类型混淆)、CVE-2021-30554(Use-After-Free)、CVE-2022-1096(V8 类型混淆)

  • Firefox:CVE-2022-1802(原型链污染导致沙箱逃逸)

  • Safari:CVE-2021-1844(WebKit 内存损坏)、CVE-2022-22620(Use-After-Free)

  • Edge(Chromium 内核):与 Chrome 共享漏洞