【问题标题】:Angular: A wildcard '*' cannot be used in the 'Access-Control-Allow-Origin' header when the credentials flag is trueAngular:当凭证标志为真时,不能在“Access-Control-Allow-Origin”标头中使用通配符“*”
【发布时间】:2014-12-12 05:42:36
【问题描述】:

我知道已经有很多关于 CORS 的问题,但他们似乎没有回答我的问题。

所以我有一个用 Angular 编写的客户端应用程序,它将用于创建一个移动应用程序(使用 Apache Cordova)。 html 文件和 JavaScript 文件将从移动设备加载。 当我模拟它并向我首先得到的 REST API 服务器发送请求时 “请求的资源上不存在'Access-Control-Allow-Origin'标头。因此不允许访问源'http://localhost:82'”。 所以我添加了 header("Access-Control-Allow-Origin: *");在我的 php REST API 服务器中。我无法指定特定域,因为请求将来自移动设备。

现在我得到“当凭据标志为真时,不能在 'Access-Control-Allow-Origin' 标头中使用通配符 '*'。”

我终于找到了解决方案,但我不确定这样保存是否安全。

在我的 php REST API 服务器中,我添加了这个:

if (isset($_SERVER['HTTP_ORIGIN'])) {
  header("Access-Control-Allow-Credentials: true");
  header("Access-Control-Allow-Origin: " . $_SERVER['HTTP_ORIGIN']);
  header("Access-Control-Allow-Headers: *, X-Requested-With, Content-Type");
  header("Access-Control-Allow-Methods: GET, POST, DELETE, PUT");
}

请就这种工作方式提出建议。如果它不安全或根本不好,请告诉我如何解决这个问题?

非常感谢!

【问题讨论】:

标签: angular rest cordova ionic-framework cors


【解决方案1】:

响应应该只有 Access-Control-Allow-Headers 中接受的标头,不要使用通配符。

就安全而言,请注意@Jules 在此post about CORS 中的评论:

请注意,将 HTTP Origin 值作为允许的来源发回 将允许任何人 使用 cookie 向您发送请求,从而可能窃取用户的会话 谁登录了您的网站,然后查看了攻击者的页面。你要么想发送'*' (这将禁止 cookie 从而防止会话窃取)或特定域 您希望网站为其工作。

请参见以下示例:

Wildcard not accepted in Access-Control-Allow-Headers

Specify headers Access-Control-Allow-Headers


替代方法

您可以将原始标头设置为:

Access-Control-Allow-Origin: *

如果您不需要在请求中包含 cookie,请删除:

Access-Control-Allow-Credentials: true

从 Access-Control-Allow-Headers 中删除通配符并添加授权,然后将该标头作为授权请求的一部分传递,而不是在 cookie 中传递凭据,例如:

Authorization: Basic a2lkMT==

另外,将 OPTIONS 添加到允许的方法中。

【讨论】:

  • 如上所述“访问控制允许来源:*”不起作用。我确实需要 cookie 和“Access-Control-Allow-Origin: *”的组合,并且似乎不允许发送 cookie。
  • 好的,如果你想使用 Allow-Credentials 那么你不能使用通配符:stackoverflow.com/a/19744754/1956540
  • 感谢您的更新,很清楚!不过,还有几个问题:1)我想我需要在每个请求上发送 Authorization 标头,或者另一个可用于识别/恢复后端会话的令牌? 2)我想我需要将令牌存储在自定义cookie(通过JS)或本地存储中以在浏览器重新加载后存活,对吧? 3) 我想这一切都比处理身份验证的 HttpOnly cookie 安全,对吧?我想令牌可能比使用 HttpOnly cookie 更容易被黑客入侵......
猜你喜欢
  • 2017-01-10
  • 1970-01-01
  • 2013-08-19
  • 1970-01-01
  • 2014-07-08
  • 2018-05-16
相关资源
最近更新 更多