「 网络安全常用术语解读 」同源策略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

相关推荐
WTT00111 小时前
2024楚慧杯WP
大数据·运维·网络·安全·web安全·ctf
黑客Jack5 小时前
防御 XSS 的七条原则
安全·web安全·xss
东方隐侠安全团队-千里5 小时前
网安瞭望台第17期:Rockstar 2FA 故障催生 FlowerStorm 钓鱼即服务扩张现象剖析
网络·chrome·web安全
Mitch3117 小时前
【漏洞复现】CVE-2021-45788 SQL Injection
sql·web安全·docker·prometheus·metersphere
网络安全King7 小时前
网络安全 - SQL Injection
sql·web安全·php
m0_748237059 小时前
2024年“羊城杯”粤港澳大湾区网络安全大赛 初赛 Web&数据安全&AI 题解WriteUp
前端·安全·web安全
hwscom9 小时前
如何永久解决Apache Struts文件上传漏洞
java·服务器·struts·web安全·apache
网络安全(华哥)9 小时前
X-Forwarded-For注入漏洞
windows·安全·web安全
独行soc11 小时前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍10基于文件操作的SQL注入(File-Based SQL Injection)
数据库·安全·web安全·漏洞挖掘·sql注入·hw