同源策略(SOP)的绕过技术详解
字数 1297 2025-11-29 15:19:33
同源策略(SOP)的绕过技术详解
描述
同源策略(Same-Origin Policy, SOP)是浏览器的核心安全机制,用于隔离不同源的文档或脚本,防止恶意网站窃取用户数据。其"同源"判定基于协议、域名、端口三者完全一致。但在特定场景下,SOP可被绕过,例如通过配置错误、跨域资源共享(CORS)滥用或浏览器特性漏洞。本知识点将系统分析SOP的常见绕过技术及其原理。
解题过程
-
理解SOP的基本限制
- SOP限制不同源的脚本访问以下资源:
- DOM(如通过
iframe访问跨域页面的内容) - Cookie或LocalStorage
- AJAX响应(通过
XMLHttpRequest或Fetch API发送的请求)
- DOM(如通过
- 例外情况:某些标签(如
<img>、<script>)允许加载跨域资源,但无法直接读取内容。
- SOP限制不同源的脚本访问以下资源:
-
绕过技术1:CORS配置错误
- 若服务器设置
Access-Control-Allow-Origin: *(允许所有域),或动态反射请求中的Origin头,攻击者可构造恶意页面直接读取跨域AJAX响应。 - 示例:
// 恶意网站发起请求 fetch('https://target.com/api/data', { credentials: 'include' // 尝试携带Cookie }).then(response => response.text()).then(data => stealData(data));- 若目标服务器响应头包含
Access-Control-Allow-Origin: https://attacker.com且Access-Control-Allow-Credentials: true,则可窃取用户凭据下的数据。
- 若目标服务器响应头包含
- 若服务器设置
-
绕过技术2:JSONP劫持
- 早期跨域数据交换方式,通过
<script>标签加载返回JSONP格式(如callback(data))的接口。 - 攻击步骤:
- 诱导用户访问恶意页面,页面中插入
<script src="https://target.com/api?callback=steal">。 - 实现全局函数
steal(data),在数据返回时自动执行并窃取内容。
- 诱导用户访问恶意页面,页面中插入
- 防御:服务器应验证
Referer头或禁用JSONP接口。
- 早期跨域数据交换方式,通过
-
绕过技术3:postMessage滥用
window.postMessage是安全的跨域通信API,但若实现不当(如未验证消息来源或目标域),可能导致数据泄露。- 示例漏洞代码:
// 目标页面监听消息 window.addEventListener('message', (event) => { // 未验证event.origin,直接处理数据 document.getElementById('secret').innerHTML = event.data; });- 攻击者可在恶意页面中向目标窗口发送恶意消息,篡改其DOM。
-
绕过技术4:跨域资源嵌入与侧信道攻击
- 利用浏览器允许嵌入跨域资源(如图片、脚本)的特性,通过响应时间或错误信息推断数据。
- 案例:
- 图片加载:将敏感数据作为参数请求图片,根据加载成功/失败判断数据内容(如密码是否正确)。
- 错误信息:通过
<script>标签加载跨域API,利用语法错误信息泄露部分数据。
-
防御措施
- 服务器端:
- 严格配置CORS,避免使用通配符
*,并校验Origin头。 - 关键操作使用CSRF令牌认证。
- 严格配置CORS,避免使用通配符
- 客户端:
- 使用
Content-Security-Policy限制资源加载源。 - 对
postMessage始终验证event.origin和event.source。
- 使用
- 服务器端:
总结
SOP绕过本质是利用浏览器特性或服务端配置疏漏。深入理解每种技术的原理与限制条件,有助于在开发与渗透测试中识别并修复此类漏洞。