了解 CORS 和同源策略

Understanding CORS and Same origin policy

假设我拥有一个网站 www.a.com,该网站会在用户登录后向其显示一些信息。这是流程(假设一切都通过 https,即使没有明确提及)-

  1. 用户加载 https://www.a.com/,这也会发送登录页面。
  2. 用户输入 login+passwd 并且 JS 调用 www.a.com/login 并取回身份验证令牌 (T)。
  3. JS 然后调用 www.a.com/getdata(同时发送 T)。服务器响应相应用户的数据。

看代码就知道JS使用的两个API是www.a.com/login和www.a.com/getdata

下面是我感到困惑的场景 -

  1. 如果流氓实体(或像 mint 这样的人)创建了一个网站 (www.r.com),要求提供用户密码并将其发布到 API,我的服务器可以知道吗? 这里的 JS 不是来自 a.com 而是由 r.com 完全重写的。 CORS 规则或同源策略是否适用于此?

  2. 另一种情况,如果 www.r.com 在其页面上嵌入了一个框架,该框架正在加载 www.a.com 并在那里询问用户名和密码,这意味着它实际上正在加载 a.com JS。在这种情况下,来自 r.com 的 JS 是否可以访问向下发送到框架加载 a.com 的数据?

此处是否适用 CORS 规则或同源策略?

是的。根据同源策略,r.com 上的脚本将无法读取它对 a.com 发出的任何请求的结果。因此它将无法读取登录令牌。如果您添加 CORS 支持,那么您可以选择允许 r.com 访问,在这种情况下,它将能够与您的站点自由交互。

请注意,如果 r.com 是恶意站点并且能够让用户输入密码,则浏览器的同源策略实际上不会保护用户。恶意页面可以将信息发送到他们自己的服务器,在那里可以使用用户的凭据将任意请求发送到您的站点。

r.com的JS可以访问发送到框架加载a.com的数据吗?

同源策略也适用于 iframe,因此 r.com 脚本将无法访问发送到 a.com iframe 的数据。