Browser 检测浏览器而不检查用户代理

Browser 检测浏览器而不检查用户代理,browser,user-agent,Browser,User Agent,您好,有没有一种方法可以在不检查用户代理的情况下检测使用javascript/php的浏览器?我试图检测可能伪造用户代理的非人类访问者(sockets和CURL尝试) 不可靠,不。任何人都可以伪造真实的客户 行为良好的机器人将使用自己的用户代理。无论如何,你不应该担心行为不好的机器人。同意用户代理不可靠且容易被欺骗。然而,您可能能够构建一些JavaScript,以使欺骗变得更加困难。它当然可以区分没有JavaScript引擎的东西。请看我的答案:不仅仅是通过JavaScript或用户代理字符串来

您好,有没有一种方法可以在不检查用户代理的情况下检测使用javascript/php的浏览器?我试图检测可能伪造用户代理的非人类访问者(sockets和CURL尝试)

不可靠,不。任何人都可以伪造真实的客户


行为良好的机器人将使用自己的用户代理。无论如何,你不应该担心行为不好的机器人。

同意用户代理不可靠且容易被欺骗。然而,您可能能够构建一些JavaScript,以使欺骗变得更加困难。它当然可以区分没有JavaScript引擎的东西。请看我的答案:

不仅仅是通过JavaScript或用户代理字符串来检测它

我对伪造用户代理字符串时如何识别浏览器做了一些研究。我发现许多浏览器(有时版本差异很小,有时版本差异很大)以不同的顺序发送不同的标题信息。一般来说,通过检测头信息发送到服务器的顺序,可以区分所有大型浏览器(Firefox、IE、Chrome等)。尽管如此,这也可以被欺骗

有关更多信息,请阅读此处:

检测起来有点棘手,但也有可能。在PHP中,您可以简单地使用函数来完成此任务。正如我所测试的,它为您提供了与浏览器发送的标题信息相同的顺序。您只需要检测每个键的实际索引

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

编辑:

我编写了一个脚本来检测PHP中的一些主要浏览器。起初,我忘记了通过单击页面链接将发送的引用。我在列表中添加了IE和FF的标题,也许这对任何事情都有帮助。我还将脚本上传到hide.network/header.php,但不能发布超过两个链接

<?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 "</pre>";
?>