同源策略(Same-Origin Policy)是浏览器最基础的安全机制之一,只有协议、域名和端口完全相同的两个页面才被视为同源,脚本才能相互读取数据,从而防止恶意网站窃取用户在其他站点的敏感信息。

| 类型 | 浏览器安全机制 |
| 英文名 | Same-Origin Policy(SOP) |
| 提出方 | Netscape(网景公司) |
| 应用范围 | 所有主流 Web 浏览器 |
| 相关技术 | CORS、JSONP、postMessage |
同源策略(Same-Origin Policy,简称 SOP)是 Web 浏览器内置的一项核心安全机制,它规定一个网页中的脚本只能读取与其「同源」的另一个网页的数据,而判断是否同源的依据是两个页面的协议、主机名(域名)和端口号是否完全一致。
同源策略最早由 Netscape 在上世纪九十年代中期随浏览器脚本能力一同引入,此后成为所有主流浏览器共同遵守的基本规则。它的出发点很朴素:用户可能同时打开网上银行和一个陌生网站,如果没有隔离,陌生网站上的脚本就能通过 DOM(文档对象模型)读取银行页面的内容、Cookie 或本地存储,造成严重的信息泄露。
需要注意的是,「同源」的判定非常严格。例如 http 与 https 协议不同、www 子域与主域不同、端口号不同,都会被视为不同源。同源策略主要限制的是「读取」行为,例如跨源的 DOM 访问、Cookie 读取和 Ajax 响应读取;而像图片、脚本、样式表等资源的「嵌入引用」通常不受限制,这也是网页仍能正常加载 CDN 资源的原因。
实际开发中常有合法的跨源需求,业界为此发展出多种受控的放行手段:最主流的是 CORS(跨源资源共享),由服务器通过响应头声明允许哪些源访问;不同窗口或 iframe 之间可用 postMessage 安全通信;早期还流行 JSONP,此外也可通过同源的服务端代理转发请求。
问:同源策略和 CORS 是什么关系?答:同源策略是浏览器默认的限制,CORS 是在这套限制之上由服务器主动「开白名单」的标准方案,两者相辅相成而非互相替代。
问:同源策略能防住 CSRF 攻击吗?答:不能完全防住。同源策略主要阻止跨源「读取」数据,而 CSRF 利用的是浏览器自动携带 Cookie 发起请求这一行为,还需要配合 CSRF Token、SameSite Cookie 等手段防御。
问:本地开发时遇到跨域报错怎么办?答:常见做法是让开发服务器配置代理转发接口请求,或在后端开启 CORS 允许本地开发地址,不建议随意关闭浏览器安全设置。

| 类型 | 浏览器安全机制 |
| 英文名 | Same-Origin Policy(SOP) |
| 提出方 | Netscape(网景公司) |
| 应用范围 | 所有主流 Web 浏览器 |
| 相关技术 | CORS、JSONP、postMessage |
登录 后参与讨论
暂无讨论,来发表第一条评论吧