У меня есть простой пиксель отслеживания, используемый для проверки учетных записей пользователей:
<?php
header('Content-Type: image/gif');
readfile('trackingpixel.gif');
if(isset($_GET['a'])){
... stuff
}
if(isset($_GET['b'])){
... stuff
}
if(isset($_GET['c'])){
... stuff
}
$requesting = $_SERVER['HTTP_REFERER'];
... If requesting matches value stored in db, and a/b/c are all good, do stuff
?>
который доступен через:
<img src="http://thisismydomain.com/trackingpixel.php?a=...&b=...&c=..." />
И это обычно работает, как и ожидалось.
Идея состоит в том, что у некоторых пользователей есть свои собственные домены, и они хотят «заявить» о них и убедиться, что они являются настоящими владельцами. У нас есть другие варианты проверки (т. Е. Мета-теги), но это самый простой способ для самых простых пользователей — просто скопируйте и вставьте прозрачное изображение, и Боб станет вашей тетушкой.
Единственный $_SERVER
переменная, которая содержит запрашивающий домен HTTP_REFERER
Но даже самый простой поиск в Google вернет множество статей, в которых обсуждается ненадежность и легкость подмены ценности.
непосредственно из PHP.NET
‘HTTP_REFERER’
Адрес страницы (если есть), на которую ссылается
пользовательский агент для текущей страницы. Это устанавливается пользовательским агентом. Не все
Пользовательские агенты установят это, а некоторые предоставляют возможность изменять
HTTP_REFERER как функция. Короче говоря, этому нельзя доверять.
И есть множество сообщений SO, обсуждающих то же самое.
В таком виде полукомпетентная компьютерная обезьяна может подделать свой неверный домен, чтобы отобразить его как правильный, а затем поместить <img>
на их странице. Мой PHP-скрипт будет думать, что все было честно, и проходить все условия.
Нет Буэно! Pas bien!
Есть ли альтернатива HTTP_REFERER
, что я могу использовать для проверки запрашивающего домена? Что-то безопасное и желательно обязательное?
Задача ещё не решена.
Других решений пока нет …