我在索引页面的顶部添加了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”错误。如何删除这些日志?
谢谢!
答案 0 :(得分: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 ();
}
?>
答案 1 :(得分:1)
你可以确保先设置它:
<?php
if (isset($_SERVER["HTTP_USER_AGENT"]) && preg_match ("/CaptiveNetworkSupport/", $_SERVER["HTTP_USER_AGENT"])) {
header ("HTTP/1.0 400 Bad Request");
exit ();
}
?>
答案 2 :(得分: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一起使用时。
答案 3 :(得分:0)
使用isset($_SERVER['HTTP_USER_AGENT'])
或array_key_exists( 'HTTP_USER_AGENT', $_SERVER )
检查密钥HTTP_USER_AGENT
是否存在。
当您引用不存在的密钥时,您会收到通知。你可以在配置中全局禁止通知,但这是一种非常糟糕的做法。
您可以使用@来抑制单个呼叫的所有错误。例如:@$_SERVER['HTTP_USER_AGENT']
(抱歉英语不好)