了解CORS和同源策略

时间:2017-04-28 17:31:17

标签: rest security browser cors 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)。服务器使用适当用户的数据进行响应。
  4. 只要查看代码,任何人都可以知道JS使用的两个API是www.a.com/login和www.a.com/getdata

    现在这里是我感到困惑的情景 -

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

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

1 个答案:

答案 0 :(得分:0)

此处是否适用CORS规则或相同的原始政策?

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

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

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

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