Как принято решать проблему CORS?
От: Stalker. Австралия  
Дата: 13.01.18 21:49
Оценка:
Есть вебсайт, на ангуляре, бэкэндом выступает Web API, т.к. это отдельный сервис — put и post запросы неработают. Какой общепринятый подход к этому — разрешать CORS на сервисе апи, или лепить промежуточный слой на вебсайте? Вроде как разрешать CORS будет уязвимость в системе, промежуточный слой — довольно массивная штука получится т.к. все запросы там дублировать придется.
Re: Как принято решать проблему CORS?
От: A13x США  
Дата: 13.01.18 22:39
Оценка:
Здравствуйте, Stalker., Вы писали:

S> Вроде как разрешать CORS будет уязвимость в системе...


Не будет, если не разрешать CORS только конкретному сайту/сайтам.
Re[2]: Как принято решать проблему CORS?
От: Stalker. Австралия  
Дата: 14.01.18 00:00
Оценка:
Здравствуйте, A13x, Вы писали:

A>Не будет, если не разрешать CORS только конкретному сайту/сайтам.


Ок, тогда вопрос по его активации в ASP.NET Core:
Если добавить вот это в конфигурацию Web API:

services.AddCors();
...
app.UseCors(options => options.WithOrigins("http://example.com").AllowAnyMethod());

то запросы начинают проходить, но почему так происходит? Мой сайт не http://example.com, а localhost, значит запросы должны отклонятся, но они почему-то работают. Также никаких Access-Control-Allow-Origin хэдеров через Fiddler не отлавливается, хотя они должны быть?
Re[3]: Как принято решать проблему CORS?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 14.01.18 07:35
Оценка:
Здравствуйте, Stalker., Вы писали:

S>Здравствуйте, A13x, Вы писали:




S>то запросы начинают проходить, но почему так происходит? Мой сайт не http://example.com, а localhost, значит запросы должны отклонятся, но они почему-то работают. Также никаких Access-Control-Allow-Origin хэдеров через Fiddler не отлавливается, хотя они должны быть?


У тебя случаем не по ip-адресу в ie идёт обращение? В ие традиционно порт не является частью адреса.
Re[4]: Как принято решать проблему CORS?
От: Stalker. Австралия  
Дата: 14.01.18 09:14
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>У тебя случаем не по ip-адресу в ie идёт обращение? В ие традиционно порт не является частью адреса.


да, в Edge, так ведь разница не только в портах, скажем мой сайт http://localhost:3322, a в настройках CORS ведь у меня стоит http://example.com, оно не должно работать, но работает почему-то.
Еще странее результат на Опере, там просто вообще не работает никак, даже если в списке разрешенных укажу http://localhost:3322, preflight запрос уходит с Оперы на сервер, тот отвечает (но почему-то без CORS хэдеров)

HTTP/1.1 204 No Content
Server: Kestrel
X-SourceFiles: =?UTF-8?B?QzpcVXNlcnNcU2VyZ2V5X...=?=
X-Powered-By: ASP.NET
Date: Sun, 14 Jan 2018 00:24:28 GMT

Далее Опера просто ничего не делает. Ерунда какая-то
Re[3]: Как принято решать проблему CORS?
От: Sharov Россия  
Дата: 15.01.18 09:51
Оценка:
Здравствуйте, Stalker., Вы писали:

S> Мой сайт не http://example.com, а localhost, значит запросы должны отклонятся, но они почему-то работают. Также никаких Access-Control-Allow-Origin хэдеров через Fiddler не отлавливается, хотя они должны быть?


Вероятно, localhost у них автоматом прописывается.
Кстати, я в NancyFx так решил эту проблему
 //CORS Enable
  pipelines.AfterRequest.AddItemToEndOfPipeline(
           ctx =>
             {
               ctx.Response.WithHeader("Access-Control-Allow-Origin", "*")
                           .WithHeader("Access-Control-Allow-Methods", "POST,GET")
                           .WithHeader("Access-Control-Allow-Headers", "Accept, Origin, Content-type");
                        });
Кодом людям нужно помогать!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.