Агент пользователя CURL
Итак, как я могу проверить использование codeigniter, если клиент curl, а затем вернуть что-то другое для него?
4 ответов
вы можете подделка user-agent при использовании cURL, поэтому это бессмысленно в зависимости от пользовательского агента, отправленного, когда вы знаете, что это запрос cURL.
например: недавно я написал приложение, которое получает pagerank url-адреса из google. Теперь Google это не нравится, поэтому он позволяет только определенному агенту пользователя получить доступ к своим серверам pagerank. Решение? Спуф пользовательского агента с помощью cURL и Google не будет мудрее.
мораль истории: cURL пользовательские агенты просто ненадежный.
если вы все еще хотите это сделать, то вы должны иметь возможность получить переданный пользовательский агент так же, как обычно
$userAgent=$_SERVER['HTTP_USER_AGENT'];
редактировать быстрый тест доказал это:
dumpx.на PHP:
<?php
$url="http://localhost/dump.php";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
if($_GET['u']==y) {
curl_setopt($ch, CURLOPT_USERAGENT, "booyah!");
}
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
//curl_setopt($ch, CURLOPT_CUSTOMREQUEST,'GET');
curl_setopt ($ch, CURLOPT_HEADER, 0);
$exec=curl_exec ($ch);
?>
свалка.на PHP:
<?php
var_dump($_SERVER);
?>
Пример 1: http://localhost/dumpx.РНР?u=y
'HTTP_USER_AGENT' => string 'booyah!' (length=7)
Пример 2: http://localhost/dumpx.РНР?u=n
нет $_SERVER ['HTTP_USER_AGENT']
это доказывает, что нет агента пользователя по умолчанию для curl: он просто не передаст его в заголовке запроса
Если вы хотите обнаружить ботов, вы не можете полагаться на агента пользователя. Лучшие практики:
- проверьте, что ваш посетитель запускает js (не все пользователи также делают).
- проверяем, что ваш посетитель загружает дополнительные файлы, связанные с веб-страницы (CSS, изображения, и т. д.)
- Регистрация времени ожидания посетителя. Люди обычно не загружают 10 страниц в секунду.
cURL означает-Client URL Library, и весь смысл в том, чтобы иметь возможность делать запросы, идентичные тому, что сделал бы клиент.
единственное, что вы можете сделать, это обнаружить информацию, которая является частью запроса, например, IP-адрес, заголовки HTTP-запросов, cookie/session id cookie, URL (путь/страница) и любые данные post/get. Если человек, использующий curl для запроса, делает это с ожидаемого IP-адреса и предоставляет ожидаемый заголовок / cookie/токен/URL/post / get значения, тогда вы не сможете отличить запрос curl от браузера, делающего запрос.
Вы можете подмена или установите пользовательский заголовок агента пользователя при использовании cURL, поэтому он не будет надежным.
в противном случае, вы можете сделать это:
if(strtolower($this->input->server('HTTP_USER_AGENT', true)) == 'curl')
{
// Is using cURL
}
это произойдет только в том случае, если запрос cURL содержит curl
в заголовке агента пользователя.
насколько я знаю, при выполнении запроса curl нет установленного по умолчанию агента пользователя.