Подтвердить что ты не робот

Предотвращение спуфинга ссылок CURL

Мы получили PHP-код от разработчика с веб-статистикой script, которая опирается исключительно на $_SERVER['HTTP_REFERER']. С помощью cURL вы можете легко подделать его следующим образом:

curl_setopt($curl, CURLOPT_REFERER, "client website");

и я ищу способ предотвратить это. Это может даже быть сделано на веб-сайте клиента, чтобы иметь более высокую статистику. Я ищу способ предотвратить эту подделку. Это вообще возможно? Если да, то как это можно достичь?

4b9b3361

Ответ 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.