Angularjs:当凭据标志为真时,通配符’*’不能用于“Access-Control-Allow-Origin”标头

前端之家收集整理的这篇文章主要介绍了Angularjs:当凭据标志为真时,通配符’*’不能用于“Access-Control-Allow-Origin”标头前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我知道有很多关于CORS的问题,但他们似乎没有回答我的问题.

所以我有一个用AngularJS编写的客户端应用程序,用于创建一个移动应用程序(与Apache Cordova).将从移动设备加载html文件JavaScript文件.
当我模拟它,我发送请求到REST API服务器我第一次得到
所请求的资源上不存在“Access-Control-Allow-Origin”头,因此原址’http:// localhost:82’不允许访问.
所以我添加标题(“Access-Control-Allow-Origin:*”);在我的PHP REST API服务器.由于请求将来自移动设备,因此我无法指定特定的域.

现在,当凭证标志为真时,我得到“通配符”*’不能用于“访问控制允许原始”标头.

我终于找到了一个解决方案,但我不知道这样做是安全的.

在我的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");
}

请告知这种工作方式.如果不安全或没有好处,请告诉我如何解决这个问题?

非常感谢!

响应应该仅在Access-Control-Allow-Headers中具有接受的标题,不要使用通配符.

就安全而言,请注意这个post about CORS的@Jules的评论

Note that sending the HTTP Origin value back as the allowed origin
will allow anyone
to send requests to you with cookies,thus potentially stealing a session from a user
who logged into your site then viewed an attacker’s page. You either want to send ‘*’
(which will disallow cookies thus preventing session stealing) or the specific domains
for which you want the site to work.

另见以下例子:

Wildcard not accepted in Access-Control-Allow-Headers

Specify headers Access-Control-Allow-Headers

替代方法

您可以将origin标题设置为:

Access-Control-Allow-Origin: *

如果您不需要在您的请求中包含Cookie remove:

Access-Control-Allow-Credentials: true

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

Authorization: Basic a2lkMT==

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

原文链接:https://www.f2er.com/angularjs/142539.html

猜你在找的Angularjs相关文章