联系官方销售客服

1835022288

028-61286886

安装后通过设置ip白名单实现只允许指定IP访问后台。

IP设置错误后可以通过访问:http://域名/index.php?s=iplist&c=home自动授权当前IP。

实现原理:通过后台登陆之前钩子来实现IP限制。

使用方法:后台下载安装后把下面的代码添加到自定义钩子文件(/config/hooks.php)中


\Phpcmf\Hooks::on('admin_login_before', function($post) {

$cz = \Phpcmf\Service::M()->db->tableExists(\Phpcmf\Service::M()->dbprefix('iplist'));
if($cz){
    
    $rts = \Phpcmf\Service::M()->db->table('iplist')->where('status', 2)->countAllResults();
if($rts==0){
}else{
if (getenv("HTTP_CLIENT_IP"))
  $ip = getenv("HTTP_CLIENT_IP"); 
else if(getenv("HTTP_X_FORWARDED_FOR"))
  $ip = getenv("HTTP_X_FORWARDED_FOR");
else if(getenv("REMOTE_ADDR"))
  $ip = getenv("REMOTE_ADDR");
else $ip = "Unknow";

$rt = \Phpcmf\Service::M()->db->table("iplist")->where("status", "2")->select("ip")->get();
if ($rt) {
  $rows = $rt->getResultArray();
  foreach ($rows as $t) {
         $array[] = $t['ip'];
    }
}
$iplists = $array;
$ALLOWED_IP=$iplists;

#$ALLOWED_IP=array('113.128.218.*','192.168.*.*');
//允许访问的ip
$check_ip_arr= explode('.',$ip);
//ip参数拆分成数组
if(!in_array($ip,$ALLOWED_IP)) {
  $bl=false;
  foreach ($ALLOWED_IP as $val){
    if(strpos($val,'*')!==false){
      //发现有*号替代符
      $arr=array();
      $arr=explode('.', $val);
      $bl=true;
      //用于记录循环检测中是否有匹配成功的
      for ($i=0;$i<4;$i++){
        if($arr[$i]!='*'){
          //不等于* 就要进来检测,如果为*符号替代符就不检查
          if($arr[$i]!=$check_ip_arr[$i]){
            $bl=false;
            break;
            //终止检查本个ip 继续检查下一个ip
          }
        }
      }
      //end for
      if($bl){
        //如果是true则终止匹配
        break;
      }
    }
  }
  //end foreach
  if(!$bl){
    $return=array(
       'status'=>0,
       'msg'=>$ip.'无权限访问',
       'data'=>$iplists
       );
    echo json_encode($return);
    
    exit();
  }
}  
}
}
});