Назад | Перейти на главную страницу

Установите Access-Control-Allow-Origin в nginx с использованием подстановочного домена

С участием nginx могу я указать Access-Control-Allow-Origin используя подстановочный знак, например *.mydomain.com?

Будет ли это выглядеть так:

add_header Access-Control-Allow-Origin *.mydomain.com;

Спасибо.

вы должны сделать это с условием if

location /  {
  set $cors "";
  if ($http_origin ~* (\.mydomain\.com|\.myseconddomain\.com)) {
      set $cors "true";
  }

  proxy_pass http://backend:10005/apathifyouwantso/;

  if ($cors = "true") {
    add_header 'Access-Control-Allow-Origin' "$http_origin";
    add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, DELETE, PUT';
    add_header 'Access-Control-Allow-Credentials' 'true';
    add_header 'Access-Control-Allow-Headers' 'User-Agent,Keep-Alive,Content-Type';
  }
}

Вы конечно можете. Я использую следующую директиву для поддержки некоторых из наших междоменных шрифтов:

  add_header Access-Control-Allow-Origin *;

Установка "Access-Control-Allow-Origin" на основе условий в nginx очень опасна, и вы должны быть осторожны. Ответ выше открывает уязвимость системы безопасности.

if ($http_origin ~* (\.mydomain\.com|\.myseconddomain\.com)) 

Эта строка будет соответствовать something.mydomain.com, а также something.mydomain.com.anyotherdomain.com (домен, который может создать кто угодно)

Это позволит реализовать следующий сценарий:

  1. Баннер заставляет пользователей открывать something.mydomain.com.anyotherdomain.com
  2. Что делает запросы на ваш сайт, используя fetch.
  3. Fetch может включать учетные данные, то есть ваши пользовательские файлы cookie.
  4. Таким образом, злоумышленник может отправлять запросы к вашему серверу с аутентификацией этого пользователя. (Пример: отправка сообщений, электронных писем и т. Д.)

И все это потому, что в регулярном выражении отсутствует один символ "$" в конце.

if ($http_origin ~* (\.mydomain\.com|\.myseconddomain\.com)$) 

Это не единственный способ сделать это конкретное регулярное выражение плохим, поэтому я объясняю проблему, а не просто добавляю $ в предыдущем ответе.