「 网络安全常用术语解读 」同源策略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 小时前
网络安全(Java语言)脚本 汇总(二)
java·安全·web安全
网络研究院5 小时前
网络安全和基础设施安全局 (CISA) 表示微分段不再是可选的
网络·安全·web安全·零信任·微分段
轻抚酸~17 小时前
小迪23年-32~40——java简单回顾
java·web安全
小李是个程序1 天前
登录与登录校验:Web安全核心解析
java·spring·web安全·jwt·cookie
2301_780789662 天前
边缘节点 DDoS 防护:CDN 节点的流量清洗与就近拦截方案
安全·web安全·ddos
观北海3 天前
网络安全蓝队常用工具全景与实战指南
安全·web安全
人衣aoa3 天前
PG靶机 - Pelican
web安全·网络安全·渗透测试·内网渗透
lingggggaaaa3 天前
小迪安全v2023学习笔记(六十一讲)—— 持续更新中
笔记·学习·安全·web安全·网络安全·反序列化
峥嵘life3 天前
Android 欧盟网络安全EN18031 要求对应的基本表格填写
android·安全·web安全
挨踢攻城3 天前
IT资讯 | VMware ESXi高危漏洞影响国内服务器
安全·web安全·网络安全·vmware·虚拟化技术·厦门微思网络·vmware esxi高危漏洞