web-dev-qa-db-ja.com

CURLユーザーエージェント

では、クライアントがカールしているかどうかをcodeigniterを使用して確認し、それに対して別のものを返すにはどうすればよいですか?

10
macintosh264

CURLを使用すると、ユーザーエージェントを偽造できるため、cURLリクエストであることがわかっているときに送信されるユーザーエージェントによっては意味がありません。

例:最近、GoogleからURLのページランクを取得するアプリを作成しました。現在、Googleはこれを好まないため、特定のユーザーエージェントのみがページランクサーバーにアクセスすることを許可しています。解決? 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);
?>

dump.php:

<?php
    var_dump($_SERVER);
?>

ケース1: http://localhost/dumpx.php?u = y

 'HTTP_USER_AGENT' => string 'booyah!' (length=7)

ケース2: http://localhost/dumpx.php?u = n

いいえ$ _SERVER ['HTTP_USER_AGENT']

これは、curlのデフォルトのユーザーエージェントがないことを証明しています。リクエストヘッダーでそれを渡さないだけです。

23

ボットを検出したい場合は、ユーザーエージェントに頼ることはできません。ベストプラクティスは次のとおりです。

  1. 訪問者がjsを実行していることを確認します(すべての人間のユーザーも実行しているわけではありません)。
  2. 訪問者がWebページにリンクされた追加のファイル(css、画像など)をロードしていることを確認してください
  3. 訪問者のタイムアウトを確認します。人間は通常、1秒あたり10ページをロードしません。
3
Oroboros102

cURLは-ClientURL Libraryの略であり、その要点は、クライアントが行うものと同じリクエストを行えるようにすることです。

実行できるのは、IPアドレス、HTTPリクエストヘッダー、Cookie /セッションIDCookie、URL(パス/ページ)、投稿/取得データなど、リクエストの一部である情報を検出することだけです。 curlを使用してリクエストを行う人が、予想されるIPアドレスからリクエストを実行し、予想されるヘッダー/ cookie /トークン/ URL/post/get値を提供している場合、curlリクエストを作成するブラウザーと区別することはできませんリクエスト。

2
Kamil Lach

spoofを使用するか、cURLを使用するときにカスタムユーザーエージェントヘッダーを設定できるため、信頼性が低くなります。

それ以外の場合は、これを行うことができます:

if(strtolower($this->input->server('HTTP_USER_AGENT', true)) == 'curl')
{
    // Is using cURL
}

これは、cURLリクエストのユーザーエージェントヘッダーにcurlが含まれている場合にのみ発生します。

私の知る限り、curlリクエストを実行するときにデフォルトのユーザーエージェントが設定されていません。

1
MacMac