Правильная обработка запросов CORS требует больше усилий. Вот функция, которая ответит более полно (и правильно).
function cors() {
if (isset($_SERVER['HTTP_ORIGIN'])) {
header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}");
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Max-Age: 86400');
}
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']))
header("Access-Control-Allow-Methods: GET, POST, OPTIONS");
if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']))
header("Access-Control-Allow-Headers: {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}");
exit(0);
}
echo "You have CORS!";
}
Примечания по безопасности
Когда браузер хочет выполнить межсайтовый запрос, он сначала подтверждает, что это нормально, с помощью «предполетного» запроса к URL. Разрешая CORS, вы сообщаете браузеру, что ответы с этого URL-адреса могут быть переданы другим доменам.
CORS не защищает ваш сервер. CORS пытается защитить ваших пользователей, сообщая браузерам, какие ограничения должны быть на обмен ответами с другими доменами. Обычно такой вид обмена категорически запрещен, поэтому CORS - это способ проделать брешь в обычной политике безопасности браузера. Эти дыры должны быть как можно меньше, поэтому всегда сверяйте HTTP_ORIGIN с каким-то внутренним списком.
Здесь есть некоторые опасности , особенно если данные, которые обслуживает URL, обычно защищены. Вы фактически разрешаете контенту браузера, который был создан на каком-то другом сервере, читать (и, возможно, манипулировать) данными на вашем сервере.
Если вы собираетесь использовать CORS, внимательно прочтите протокол (он довольно маленький) и попытайтесь понять, что вы делаете. Для этой цели в примере кода приведен ссылочный URL.
Безопасность заголовка
Было замечено, что заголовок HTTP_ORIGIN небезопасен, и это правда. Фактически, все заголовки HTTP небезопасны для разных значений этого термина. Если заголовок не содержит проверяемую подпись / hmac или весь разговор не аутентифицирован через TLS, заголовки - это просто «то, что мне сказал браузер».
В этом случае браузер сообщает: «объект из домена X хочет получить ответ от этого URL-адреса. Это нормально?» Суть CORS - иметь возможность ответить: «Да, я разрешаю это».