Обнаружение браузера без проверки useragent - PullRequest
0 голосов
/ 10 августа 2011

Здравствуйте, есть ли способ обнаружить браузер с помощью javascript / php без проверки идентификатора пользователя?Я пытаюсь обнаружить нечеловеческих посетителей (сокеты и попытки CURL), которые могли подделать пользовательский агент.

Ответы [ 3 ]

1 голос
/ 10 августа 2011

Ненадежно, нет. Любой может подделать фактического клиента.

Боты с хорошим поведением будут использовать свой собственный пользовательский агент. В любом случае, вам не следует беспокоиться о не очень хороших ботах.

0 голосов
/ 21 апреля 2015

Это больше, чем пытаться обнаружить его с помощью JavaScript или строки пользовательского агента.

Я провел некоторое исследование о том, как можно идентифицировать браузер при фальсификации строки пользовательского агента.Я обнаружил, что многие браузеры (иногда с небольшими различиями версий, иногда с большими) отправляют различную информацию заголовка в другом порядке.В целом, можно различить все большие браузеры (Firefox, IE, Chrome, ...), определяя порядок отправки информации заголовка на сервер.Несмотря на все, это также может быть подделано.

Для получения дополнительной информации читайте здесь: http://hide.network/why-does-changing-your-user-agent-almost-come-to-nothing/

Это немного сложно обнаружить, но возможно.В PHP вы можете просто использовать функцию getallheaders () для выполнения этой задачи.Как я проверял, он дает вам тот же порядок информации заголовка, что и браузер.Вам нужно только определить фактический индекс каждого ключа.

<?php
    foreach (getallheaders() as $name => $value)
    {
        echo "$name: $value<br />\n";
    }
?>

Редактировать:

Я написал скрипт для обнаружения некоторых основных браузеров в PHP.Сначала я забыл реферера, который будет отправлен по ссылке на страницу.Я добавил заголовки с реферером IE и FF в список, возможно, это может помочь с чем угодно.Я также загрузил скрипт в hide.network / header.php, но не могу опубликовать более двух ссылок.

<code><?php
    $headerInformation = array();

    // declaring and filling pre-defined header orders of browsers
    $browserInformation =   array
                            (
                                "browserNames" => array
                                (
                                    "Mozilla Firefox 37.0",
                                    "Mozilla Firefox 37.0 with referer",
                                    "Internet Explorer 11",
                                    "Internet Explorer 11 with referer",
                                    "Internet Explorer 8",
                                    "Google Chrome 42",
                                    "SRWare Iron 37"
                                ),
                                "headerInformation" => array
                                (
                                    array("host", "user-agent", "accept", "accept-language", "accept-encoding", "connection", "cache-control"),
                                    array("host", "user-agent", "accept", "accept-language", "accept-encoding", "referer", "connection", "cache-control"),
                                    array("accept", "accept-language", "user-agent", "accept-encoding", "host", "dnt", "connection"),
                                    array("accept", "referer", "accept-language", "user-agent", "accept-encoding", "host", "dnt", "connection"),
                                    array("accept", "accept-language", "user-agent", "accept-encoding", "host", "connection"),
                                    array("host", "connection", "cache-control", "accept", "user-agent", "accept-encoding", "accept-language"),
                                    array("host", "connection", "accept", "user-agent", "accept-encoding", "accept-language")
                                ),
                                "identScore" => array(0, 0, 0, 0, 0)
                            );

    // parsing all header values
    foreach (getallheaders() as $name => $value)
    {
        array_push($headerInformation, strtolower($name));
    }

    // calculating possibility for each browser
    for($i = 0; $i < count(10); $i++)
    {
        for($j = 0; $j < count($browserInformation["browserNames"]); $j++)
        {
            $currentPossibility = count(array_intersect_assoc($browserInformation["headerInformation"][$j], $headerInformation)) / count($headerInformation) * 100;
            $currentPossibility = round($currentPossibility, 2);
            $browserInformation["identScore"][$j] = $currentPossibility;
        }
    }

    // sort array
    array_multisort($browserInformation["identScore"], SORT_DESC, SORT_NUMERIC,
                    $browserInformation["browserNames"], $browserInformation["headerInformation"]);

    // output
    for($i = 0; $i < count(10); $i++)
    {
        for($j = 0; $j < count($browserInformation["browserNames"]); $j++)
        {
            echo "possibility " . $browserInformation["browserNames"][$j] . ": " . $browserInformation["identScore"][$j] . " %<br />";
        }
    }

    // output original sent header
    echo "<pre>";
    var_dump($headerInformation);
    echo "
";?>
0 голосов
/ 24 сентября 2012

Согласитесь, что пользовательский агент ненадежен и легко подделан. Тем не менее, вы можете создать JavaScript, чтобы подделать немного сложнее. Это, безусловно, может дифференцировать вещи, которые не имеют движка JavaScript. Смотрите мой ответ здесь: https://stackoverflow.com/a/12571513/399704

...