2

如果可能的话,我想在答案中举一个具体的例子。

为了解释起见,我们这里有三个玩家。

  • 我的服务器 (myserver.com)
  • 客户端服务器 (myclient.com)
  • 客户用户(通过 myclient.com 访问数据)

我正在为我的客户提供一个 Web 服务,允许他们以 JSON 格式检索他们的数据。为了让他们的网站正常工作,他们必须使用标准的 XOR 解决方法——要么在服务器端发出请求,要么依靠我来设置

Access-Control-Allow-Origin: http://myclient.com

所以这里有两部分问题。首先,为什么要myserver.com 设置源策略?为什么我的服务器关心它向谁提供内容?不应该是 myclient.com 设置这个吗?这里的具体例子会很棒。

第二部分,我知道 JSONP 可以解决这个问题,但我担心使用它,因为我不了解第一部分的安全含义。如果我可以设置 JSONP 有什么意义Access-Control-Allow-Origin: *

4

1 回答 1

3

很多问题!

  1. 如果您打算提供特定于用户的内容,JSONP 绝对是危险的。如果服务器提供的内容是完全公开的,并且(可能)是只读的,那么 JSONP 是一个明智的选择。不要将它用于任何假设“登录状态”或身份验证/授权的事情。

  2. CORS 绝对比 JSONP 好得多,但并非所有(旧版)浏览器都支持它。如果您想尽可能多地支持,您将需要某种回退。CORS 允许您执行 GET 以外的请求,这极大地提高了灵活性。

  3. 目标服务器需要允许这样做的原因,主要是因为在域 A 上运行的 javascript 不应该能够访问域 B。如果域 A 可以“允许”这样做,则意味着您可以创建可以访问沙箱的 javascript 应用程序任何公共服务器。只有域 B 的所有者才能明确允许域 A 的所有者访问其内容。

  4. 您的论点(为什么域 B 关心谁访问他们的资源)通常是有效的。但这不是保护域 B,而是保护最终用户。未经明确许可,不应允许域 A 代表最终用户对域 B 执行请求。

只是为了确定:除非您非常了解 JSONP 的安全含义,否则 CORS 可能是一个更安全的选择。

于 2012-09-28T14:30:28.787 回答