「 网络安全常用术语解读 」同源策略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] https://portswigger.net/web-security/cors/same-origin-policy

相关推荐
newxtc22 分钟前
【亿美软通-注册/登录安全分析报告】
人工智能·安全·web安全·网络安全·网络攻击模型·安全威胁分析
mingzhi6144 分钟前
奇安信渗透2面经验分享
安全·web安全·网络安全·面试
凌晨五点的星1 小时前
ssrf攻击fastcgi复现及环境搭建
web安全
网络研究院9 小时前
执行网络攻击模拟的 7 个步骤
网络·安全·web安全·攻击·模拟·实践·步骤
dreamer29211 小时前
21、Tomato
linux·安全·web安全·网络安全·系统安全
low神18 小时前
前端在网络安全攻击问题上能做什么?
前端·安全·web安全
mingzhi6120 小时前
应届生必看 | 毕业第一份工作干销售好不好?
网络·web安全·面试
白帽黑客cst20 小时前
网络安全(黑客技术) 最新三个月学习计划
网络·数据结构·windows·学习·安全·web安全·网络安全