0

我在索引页顶部添加了一个 3 行代码,以消除 imac 设备中出现的错误请求。代码如下:

<?php
if (preg_match ("/CaptiveNetworkSupport/", $_SERVER["HTTP_USER_AGENT"])) {
header ("HTTP/1.0 400 Bad Request");
exit ();
}
?>

但是我可以在 error_log 中看到很多“PHP Notice: Undefined index: HTTP_USER_AGENT in”错误。如何删除这些日志?

谢谢!

4

4 回答 4

3

也许如果您测试索引是否在之前存在preg_match

    <?php
        if ( isset($_SERVER["HTTP_USER_AGENT"]) && preg_match ("/CaptiveNetworkSupport/", $_SERVER["HTTP_USER_AGENT"]) )
        {
            header ("HTTP/1.0 400 Bad Request");
            exit ();
        }
    ?>
于 2013-05-02T04:53:04.620 回答
1

您可以确保首先设置它:

<?php
    if (isset($_SERVER["HTTP_USER_AGENT"]) && preg_match ("/CaptiveNetworkSupport/", $_SERVER["HTTP_USER_AGENT"])) {
        header ("HTTP/1.0 400 Bad Request");
        exit ();
    }
?>
于 2013-05-02T04:53:14.530 回答
1

基于用户代理检测的标头重定向可能会很快失控。多年来我继承的很多网站都有大量.htaccess文件会减慢服务器连接速度。对于未来的校对,您可以从一系列搜索开始检查(有点像黑名单)。我通常将我的存储在数据库中。这是一个使用相同功能的 user_agents 和 ip_addresses 的示例。

<?php
//user agent blacklist array
$uab = array(
'!^$!','!CaptiveNetworkSupport!','!curl!i'
);

//User agent handling array
$uah = array(
'HTTP/1.0 400 Bad Request','HTTP/1.0 400 Bad Request','HTTP/1.0 403 Forbidden',
);

$ipb = array(
'!^1\.2\.3!',
'!^8\.8\.8\.8!',
'!^199\.21!',
'!^0\.0\.0\.0$!',
);

$iph = array(
'Location: /no-bots.php',
'Location: /warning.php',
'HTTP/1.0 403 Forbidden',
'HTTP/1.0 403 Forbidden',
);


function blackList($blacklist,$handler,$means){

    foreach($blacklist as $key=>$bl){
        if (preg_match($bl,$means)){
            header($handler[$key]);
            exit();
        }
    }
}

if(!empty($_SERVER['HTTP_USER_AGENT'])){
  $user_agent = $_SERVER['HTTP_USER_AGENT'];    
} else {
  $user_agent = ''; 
}

blackList($uab,$uah,$user_agent);

//This should always be set!
if(!empty($_SERVER['REMOTE_ADDR'])){
  $ip_address = $_SERVER['REMOTE_ADDR'];    
} else {
    $ip_address = '0.0.0.0';
}

blackList($ipb,$iph,$ip_address);

?>

在我的自定义 CMS 中,我有一个禁止页面,允许后端用户确定罪犯如何受到惩罚或对待。它对于阻止各种事情很有用,最好与 iptables 结合使用。

于 2013-05-02T05:18:50.280 回答
1

使用isset($_SERVER['HTTP_USER_AGENT'])array_key_exists( 'HTTP_USER_AGENT', $_SERVER )检查密钥是否HTTP_USER_AGENT存在。

当您引用不存在的密钥时,您会收到通知。您可以在配置中全局禁止通知,但这是一种非常糟糕的做法。

您可以使用 @ 抑制单个调用的所有错误。例如。:@$_SERVER['HTTP_USER_AGENT']

(抱歉英语不好)

于 2013-05-02T04:58:40.203 回答