「 网络安全常用术语解读 」同源策略SOP详解

同源策略SOP(Same Origin Policy)是一种网络安全策略,它限制了浏览器可以访问的内容和资源。它是在早期的网络浏览器中实施的一种安全机制,以防止恶意网站利用漏洞进行恶意行为。

1. 同源策略产生背景

当浏览器从一个域发送一个HTTP请求到另一个域时,与另一个域相关的任何cookies,包括身份验证会话cookie,也会作为请求的一部分发送。如果没有同源策略,如果你访问一个恶意网站,该网站将能够读取你的电子邮件、私人消息等。

2. 什么是同源策略

同源策略(Same Origin Policy,SOP)是浏览器的一种安全机制,旨在防止网站相互攻击。同源策略规定跨域之间的脚本是隔离的,一个域的脚本不能访问/操作另一个域的绝大部分属性和方法。

这种策略有助于保护用户数据的安全,防止恶意脚本或代码的执行。同时,它也限制了网页能够访问和操作的网络资源范围,有助于提高网页的性能和安全性。

同源策略限制一个源上的脚本访问另一个源的数据。一个源包括一个URI协议、域名和端口号。例如,考虑以下URL:

http://normal-website.com/example/example.html

这使用 http 协议、域名 normal-website.com 和端口号 80 。下表显示了如果上述URL中的内容试图访问其他来源,将如何应用同源策略:

URL 是否允许访问?
http://normal-website.com/example/ 是:相同的协议、域名和端口
http://normal-website.com/example2/ 是:相同的协议、域名和端口
https://normal-website.com/example/ 否:不同的协议和端口
http://en.normal-website.com/example/ 否:不同的域名
http://www.normal-website.com/example/ 否:不同的域名
http://normal-website.com:8080/example/ 否:不同端口

同源策略的主要原则:来自相同域名的页面可以相互通信,但不同域名的页面之间则无法直接交互。这有助于保护用户免受跨站点脚本攻击(XSS)等攻击。「 典型安全漏洞系列 」01.跨站脚本攻击XSS详解

3. 同源策略的实施细节

同源策略通常控制JavaScript代码对跨域加载的内容的访问。通常允许跨域加载页面资源。例如,SOP允许通过 标签嵌入图像,通过 标签嵌入媒体,以及通过

3.1. 两个关键原则

同源策略主要基于两个关键原则:

  • 源匹配是指一个页面只能与其自身的源(协议、主机/域名、端口)匹配。换句话说,如果两个页面来自不同的源(例如,来自不同的协议或主机/域名),那么这些页面就被视为来自不同的源。
  • 同源检查是在源匹配的基础上进行的。当一个页面尝试访问其自身的资源(如JavaScript文件、图片等)时,浏览器会进行同源检查。如果两个页面来自相同的源,那么同源检查将允许页面的脚本访问这些资源。

3.2. 实现原理

策略实施的一种常见方式是"SOP"(Same-Origin Policy)或"SOPs"(Same-Origin Policies)。在SOP或SOPs中,实现原理主要涉及以下步骤:

检查请求的来源 :浏览器首先会检查请求的来源是否与当前页面的源匹配。
检查同源检查 :如果请求的来源与当前页面的源匹配,那么浏览器会进一步检查请求是否符合同源策略的其他要求,例如是否在同一域下(即协议、主机和端口都相同)。
执行同源操作:如果请求满足同源策略的所有要求,那么浏览器将允许执行相应的操作,如加载资源、执行脚本等。

值得注意的是,随着Web技术的发展,一些新的安全机制和技术已经出现,例如CORS(Cross-Origin Resource Sharing,跨域资源共享)协议和跨域通信(Cross-Origin Communication)等,它们在一定程度上对同源策略进行了扩展和改进。

关于CORS可以参阅「 典型安全漏洞系列 」10.跨域资源共享CORS漏洞详解

3.3. 例外情况

当然同源政策有多种例外情况:

  • 有些对象是跨域可写的,但不可跨域读取,例如iframes或新窗口中的 location 对象或 location.href 属性。
  • 有些对象是跨域可读但不可写的,例如 window 对象的 length 属性(用于存储页面上使用的帧数)和 closed 属性。
  • replace 函数通常可以在 location 对象上,也被称为跨域函数。
  • 可以跨域调用某些函数。例如,可以在新窗口上调用函数 close blurfocus 。也可以在iframe和新窗口上调用 postMessage 函数,以便将消息从一个域发送到另一个域。

由于传统要求,在处理cookie时,同源策略更为宽松,因此通常可以从网站的所有子域访问cookie,即使每个子域在技术上都是不同的来源。您可以使用 HttpOnly cookie标志部分降低此风险。

4. 参考

1\]

相关推荐
浩浩测试一下2 小时前
C&&汇编中的调用约定
大数据·汇编·安全·web安全·网络安全·系统安全
-曾牛3 小时前
CSRF跨站请求伪造:原理、利用与防御全解析
前端·网络·web安全·网络安全·渗透测试·csrf·原理解析
漏洞文库-Web安全5 小时前
CTFHub-RCE漏洞wp
android·安全·web安全·网络安全·ctf·ctfhub
爱喝旺仔的旺旺8 小时前
【无标题】第二届全国网络安全行业赛—电子取证初赛(第一批)
安全·web安全
运维有小邓@8 小时前
ManageEngine 卓豪荣登 KuppingerCole 2025 年《身份威胁检测与响应领导力指南》,获评市场领导者
网络·安全·web安全
白帽黑客-晨哥8 小时前
零基础转行网络安全需要学多久?
网络·安全·web安全·网络安全·零基础·就业·转行
河南互链数安8 小时前
企业多类型项目验收:渗透测试核心指南
网络·安全·web安全
漏洞文库-Web安全8 小时前
CTFHub XSS通关:XSS-过滤关键词 - 教程
前端·安全·web安全·okhttp·网络安全·ctf·xss
漏洞文库-Web安全9 小时前
CTFHub 信息泄露通关笔记9:Git泄露 Index - 指南
笔记·git·安全·web安全·elasticsearch·网络安全·ctf
老赵聊算法、大模型备案9 小时前
新规解读|《公安机关网络空间安全监督检查办法(征求意见稿)》发布,AI与互联网企业需重点关注哪些合规义务?
人工智能·安全·web安全