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