据我了解,同源策略(SOP) 基本上可以防止网页中的脚本从/向不同域获取或发送信息。
我知道这对于防止页面获取私人数据并将其传递到其他地方很重要。例如,如果没有 SOP,我可以使用以下脚本编写一个公共网页:
- 从只能访问客户端浏览器(但不能访问我的服务器)的 Intranet 站点读取信息,并且
XMLHttpRequest
使用(或fetch()
)将其发送回我的服务器
但是,当引入 SOP 时(JavaScript 1.0,1995 年的 Netscape Navigator 2.0),没有办法从 JavaScript 发送请求。XMLHttpRequest 仅在 1999 年 3 月的 Internet Explorer 5.0 中引入,fetch()
甚至更晚。
那么 - SOP 在无法发送请求的情况下阻止了哪些攻击?显然,如果没有 SOP,脚本可以获取各种潜在的私有数据,但如果脚本无法传递,风险在哪里?
客户端 JavaScript 指南 V1.3 (从 1999年开始,因此在 XMLHttpRequest 之前)只是说:
JavaScript 会自动阻止一台服务器上的脚本访问另一台服务器上的文档属性。此限制可防止脚本获取私有信息,例如目录结构或用户会话历史记录。
但是,如果脚本无法将其泄露,它并没有解释为什么“获取私人信息”会成为问题。