Access-Control-Allow-Origin

Dmitry Dedukhin dedukhin на mail.ru
Пт Окт 14 04:51:22 UTC 2011


13.10.2011 21:38, anon пишет:
> Всем привет.
>
> В ходе работы возникло несколько
> вопросов по этому заголовку.
>
> 1)Если добавляем:
>
>
> add_header Access-Control-Allow-Origin  http://127.0.0.1:8055;
> add_header Access-Control-Allow-Origin  https://mail.google.com;
> add_header Access-Control-Allow-Origin  https://docs.google.com;
>
> То не сервер отдает пустой ответ не
> смотря на правильно передающийся Origin.
> Если выставить add_header Access-Control-Allow-Origin *;
> получаем ответ.
>
> 2) Чем чревато все же выставление
> Access-Control-Allow-Origin * на весь сайт? В целом
> понятно, что 6 соединений из браузера и
> все такое, но какую это может нести в
> себе реальную угрозу?
>
> Спасибо.
>
> Posted at Nginx Forum: http://forum.nginx.org/read.php?21,216660,216660#msg-216660
>
> _______________________________________________
> nginx-ru mailing list
> nginx-ru at nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-ru

Насколько я помню, в данный момент ни один браузер не поддерживает 
наличие нескольких заголовков Access-Control-Allow-Origin (а возможно 
это и задизайнированное поведение).
"Чреватость" звездочки для меня самого остается загадкой, в голову 
приходит только то, что злоумышленник может с любого сайта не только 
делать GET/POST запросы, но и получать на них ответ. Но при этом из 
браузера нет доступа к большинству заголовков ответа 
http://www.w3.org/TR/cors/#handling-a-response-to-a-cross-origin-re (в 
частности, к кукам), так что лично я не вижу никакой потенциальной 
опасности от звездочки.
Может быть кто-то поправит меня и опасность в звездочке таки есть...

PS: возможно получится проверять заголовок Referer в конфиге (например, 
с помощью серии директив if) и выставлять нужное значение как-то так:

set $origin "http://mysite.ru";
if ($http_referer ~* ^http://trusted_domain1\.ru) {
     set $origin "http://trusted_domain1.ru";
}
if ($http_referer ~* ^http://trusted_domain2\.ru) {
     set $origin "http://trusted_domain2.ru";
}
add_header Access-Control-Allow-Origin  $origin;



Подробная информация о списке рассылки nginx-ru