Хорошо, но вы все знаете, что * является подстановочным знаком и позволяет выполнять межсайтовый скриптинг для каждого домена?
Вы хотели бы отправлять несколько заголовков Access-Control-Allow-Origin
для каждого сайта, который разрешен, но, к сожалению, официально он не поддерживается для отправки нескольких заголовков Access-Control-Allow-Origin
или для размещения нескольких источников.
Вы можете решить эту проблему, проверив источник и отправив его обратно в заголовок, если это разрешено:
$origin = $_SERVER['HTTP_ORIGIN'];
$allowed_domains = [
'http://mysite1.com',
'https://www.mysite2.com',
'http://www.mysite2.com',
];
if (in_array($origin, $allowed_domains)) {
header('Access-Control-Allow-Origin: ' . $origin);
}
Это намного безопаснее. Вы можете отредактировать соответствие и изменить его на ручную функцию с некоторым регулярным выражением или чем-то в этом роде. По крайней мере, это только отправит обратно 1 заголовок, и вы будете уверены, что это тот, из которого пришел запрос. Обратите внимание, что все HTTP-заголовки могут быть подделаны, но этот заголовок защищает клиента. Не защищайте свои собственные данные этими значениями. Если вы хотите узнать больше, прочитайте немного о CORS и CSRF.
Почему это безопаснее?
Разрешение доступа из других мест, тогда как ваш собственный доверенный сайт допускает перехват сеансов. Я собираюсь привести небольшой пример - изображение Facebook допускает использование подстановочного знака - это означает, что вы можете создать свой собственный веб-сайт и запускать вызовы AJAX (или открывать iframes) на Facebook. Это означает, что вы можете получить информацию о посетителе вашего сайта на Facebook. Хуже того - вы можете записывать POST
запросов и публиковать данные на чьем-то Facebook - только когда они просматривают ваш сайт.
Будьте очень осторожны при использовании ACAO
заголовков!