Это информация, отправленная клиентом. Обычно это страница, с которой вы щелкнули ссылку.
Это также может быть подделано. Вы можете сделать это самостоятельно, установив HEADER в запросе PHP cURL.
curl_setopt( $ch, CURLOPT_HTTPHEADER, array(
'Host: www.google.com',
'Referer: http://google.com/',
'FaKeHEADER: ThisIsFakeButItWillBeSentAnyways'));
Принимающий сервер увидит их в заголовке, хотя он никогда не был отправлен с google.com. Вы также можете подделать все остальное, что вы увидите в заголовке (пользовательские агенты, куки и т. Д.).
Вам будет трудно обнаружить поддельные заголовки, если вы не будете точно знать, как каждый из них должен выглядеть из каждого источника. Лучшее, что вы можете сделать, - это работать с IP-адресами и ограничивать типы заголовков, которые вы принимаете (например, если страница может использовать только запросы GET, отклоните все запросы POST). Даже тогда, если кто-то хочет обмануть вас, скорее всего, они будут, и вы не будете знать это.
Если вы пытаетесь защитить соединение между двумя вашими сайтами, вам следует ограничить соединение не только заголовком, который вообще не защищен.
Редактировать: Вы даже можете отправлять действительно поддельные заголовки. Я обновил пример, чтобы показать, что я имею в виду. Некоторые сайты используют собственные (например, поддельные) заголовки для прохождения проверки подлинности.