Обмен ресурсами между источниками с учетными данными и "по существу" любым источником
На шаге 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.