在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
我的问题是这根本是如何安全的?如果服务器被指示只是为了解决限制而允许凭据,那么浏览器在允许的来源中拒绝*的重点是什么?
答案 0 :(得分:0)
@ BrainSlugs83的评论似乎回答了这个问题,所以我在这里复制它:
这不安全! - 它基本上是在这里发布的“变通方法”的C#版本:https://stackoverflow.com/a/25623518/398630
此代码违反了CORS限制的目的。