使用凭证和“基本上”任何来源的跨域资源共享
Posted
技术标签:
【中文标题】使用凭证和“基本上”任何来源的跨域资源共享【英文标题】:Cross-Origin Resource Sharing with credentials and "essentially" any origin 【发布时间】:2016-03-08 21:26:12 【问题描述】:在 W3C 跨域资源共享建议 (http://www.w3.org/TR/cors/#resource-requests) 的第 3 步中指出:
如果资源支持凭据,请添加单个 Access-Control-Allow-Origin 标头,带有 Origin 的值 标头作为值,并添加单个 Access-Control-Allow-Credentials 以区分大小写的字符串“true”为值的标头。
否则,添加单个 Access-Control-Allow-Origin 标头,并带有 Origin 标头的值或字符串“*”作为值。
字符串“*”不能用于支持的资源 凭据。
这会反映在如下代码中:
if (policy.AllowAnyOrigin)
if (policy.SupportsCredentials)
result.AllowedOrigin = origin;
result.VaryByOrigin = true;
else
result.AllowedOrigin = CorsConstants.AnyOrigin;
else if (policy.Origins.Contains(origin))
result.AllowedOrigin = origin;
https://github.com/aspnet/CORS/blob/release/src/Microsoft.AspNet.Cors/CorsService.cs#L219
我的问题是这样的安全性如何?如果服务器被指示只是绕过限制,浏览器在允许的来源中拒绝 * 的意义何在?
【问题讨论】:
这是不安全的! -- 它实际上是在执行此处发布的“解决方法”的 C# 版本:***.com/a/25623518/398630 -- 此代码违背了 CORS 限制的目的。 【参考方案1】:@BrainSlugs83 的评论似乎回答了这个问题,所以我在这里复制它:
这不安全! -- 它本质上是在执行此处发布的“解决方法”的 C# 版本:https://***.com/a/25623518/398630
此代码违背了 CORS 限制的目的。
【讨论】:
以上是关于使用凭证和“基本上”任何来源的跨域资源共享的主要内容,如果未能解决你的问题,请参考以下文章