С участием 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 (домен, который может создать кто угодно)
Это позволит реализовать следующий сценарий:
fetch
.И все это потому, что в регулярном выражении отсутствует один символ "$" в конце.
if ($http_origin ~* (\.mydomain\.com|\.myseconddomain\.com)$)
Это не единственный способ сделать это конкретное регулярное выражение плохим, поэтому я объясняю проблему, а не просто добавляю $ в предыдущем ответе.