Обмен ресурсами между источниками с учетными данными и "по существу" любым источником

На шаге 3 в рекомендациях по совместному использованию ресурсов W3C ( http://www.w3.org/TR/cors/) говорится:

Если ресурс поддерживает учетные данные, добавьте один заголовок 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 ответ

Комментарий @BrainSlugs83, кажется, отвечает на вопрос, поэтому я копирую его здесь:

Это не безопасно! - по сути, он делает версию C# "обходного пути", размещенную здесь: /questions/705487/sovmestnoe-ispolzovanie-resursov-s-ispolzovaniem-uchetnyih-dannyih/705498#705498

Этот код противоречит цели ограничения CORS.

Другие вопросы по тегам