Мы получили PHP-код от разработчика с помощью скрипта веб-статистики, который полагается исключительно на $_SERVER['HTTP_REFERER']
. С помощью cURL вы можете легко подделать его следующим образом:
curl_setopt($curl, CURLOPT_REFERER, "client website");
и я ищу способ предотвратить это. Это может даже быть сделано на веб-сайте клиента, чтобы иметь более высокую статистику. Я ищу способ предотвратить эту подделку. Это вообще возможно? Если да, то как это можно достичь?
Согласно спецификации HTTP , HTTP_REFERER
является необязательным. Некоторые пакеты брандмауэра делят их по умолчанию, некоторые клиенты не отправляют значение реферера, и есть множество способов (например, тот, который вы показали в вопросе), чтобы изменить это значение.
Короче говоря, значение HTTP_REFERER
нельзя доверять. Всегда есть способ изменить эти значения. Это упоминается в документации по PHP для $_SERVER
( акцент мой):
Адрес страницы (если есть), которая ссылалась на пользовательский агент на текущую страницу. Это устанавливается пользовательским агентом. Не все пользовательские агенты установят это, а некоторые предоставляют возможность изменять HTTP_REFERER как функцию. Короче говоря, на это нельзя доверять .
Чтобы ответить на ваш вопрос: нет, нет способа предотвратить изменение значения HTTP_REFERER
. Я бы предложил вам дважды проверить значение перед его использованием (необязательно, применить htmlspecialchars()
на нем, чтобы предотвратить инъекцию) или вообще не использовать его. К сожалению, это сделка «возьмите или вернитесь домой».
Вы ничего не можете сделать с этим referrer
. Все сценарии web-stats
зависят от этого referrer
. Даже гигантские web-stats
включая google-analytics, обманываются этим фальшивым referrer
.
Это может быть хорошим решением для проверки URL-адреса реферера. Я хочу посетить реферер и проверить, существует ли ваш URL-адрес или нет. Но, конечно, его время, медленное, а также требует огромной пропускной способности. Однако этого недостаточно для решения этой проблемы.
Вот несколько проблем, на которых вы не найдете свою ссылку, когда будете отслеживать URL-адрес реферера:
Что, если указанный URL-адрес находится за сессией? Например, ссылка поступает из электронной почты, например, yahoo, google или с частного форума.
Что делать, если URL-адрес получен из ссылки javascript
/ click?
Ссылка из iframe
– это, тем не менее, ссылка на javascript
.