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

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

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

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

    Нет, нет окончательного способа определения URL-адреса.

    Согласно спецификации 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 .