使用凭证和“基本上”任何来源的跨源资源共享

时间:2015-12-04 02:36:23

标签: web cors w3c

在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

我的问题是这根本是如何安全的?如果服务器被指示只是为了解决限制而允许凭据,那么浏览器在允许的来源中拒绝*的重点是什么?

1 个答案:

答案 0 :(得分:0)

@ BrainSlugs83的评论似乎回答了这个问题,所以我在这里复制它:

  

这不安全! - 它基本上是在这里发布的“变通方法”的C#版本:https://stackoverflow.com/a/25623518/398630

     

此代码违反了CORS限制的目的。