mve*_*and 17 rest cors cordova ionic-framework angular
我知道有很多关于CORS的问题,但它们似乎没有回答我的问题.
所以我有一个用Angular编写的客户端应用程序,用于创建移动应用程序(使用Apache Cordova).将从移动设备加载html文件和JavaScript文件.当我模拟这个并且我向REST API服务器发送请求时,我首先得到"No'Access-Control-Allow-Origin'标头出现在所请求的资源上.http://localhost:82因此不允许来源".所以我添加了标题("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");
}
Run Code Online (Sandbox Code Playgroud)
请告知这种工作方式.如果它不安全或根本没有好处,请告诉我如何解决这个问题?
非常感谢!
Bat*_*cid 12
响应应该只有Access-Control-Allow-Headers中的接受标头,不要使用通配符.
至于它是安全的,请注意@Jules在这篇关于CORS的帖子中的评论:
请注意,将HTTP Origin值作为允许来源发回将允许任何人使用cookie向您发送请求,从而可能会从登录您站点的用户窃取会话,然后查看攻击者的页面.您要么发送'*'(这将禁止cookie,从而阻止会话窃取)或您希望该网站工作的特定域.
另请参阅以下示例:
Access-Control-Allow-Headers中不接受通配符
指定标头Access-Control-Allow-Headers
替代方法
您只需将origin标头设置为:
Access-Control-Allow-Origin: *
Run Code Online (Sandbox Code Playgroud)
如果您不需要在请求中包含cookie,请删除:
Access-Control-Allow-Credentials: true
Run Code Online (Sandbox Code Playgroud)
从Access-Control-Allow-Headers中删除通配符并添加授权,然后将该标头作为授权请求的一部分传递,而不是在cookie中传递凭据,例如:
Authorization: Basic a2lkMT==
Run Code Online (Sandbox Code Playgroud)
此外,将OPTIONS添加到允许的方法.
| 归档时间: |
|
| 查看次数: |
57526 次 |
| 最近记录: |