UCHome: IP控制

UCHome可以通过设置允许某些IP地址访问,也可以禁止某些IP地址访问。

IP控制的设置可以在管理后台通过“访问IP设置”完成。

1. 设置数据的保存
IP控制的数据保存在UCHome的配置表config中,ipaccess代表允许访问的IP,ipbanned代表禁止访问的IP。可以设置多个,每个 IP以\r\n分隔,既可输入完整地址,也可只输入 IP 开头。例如: 
"192.168."(不含引号) 可匹配 192.168.0.0~192.168.255.255 范围内的所有地址,留空为所有 IP 均可访问。 

2. checkclose()函数

function checkclose() {

  global $_SGLOBAL, $_SCONFIG;



  // $_SCONFIG['close']:当前站点是否处于关闭状态,1代表关闭,0代表正常。

  // $_SCONFIG['closereason']:当前站点关闭的原因

  // $_SGLOBAL['supe_uid']:当前登陆后台的管理员ID

  // ckfounder():检查用户ID是否是站点创建者

  // checkperm('closeignore'):用户组可以在后台设置权限是否忽略关闭信息



  if($_SCONFIG['close'] && !ckfounder($_SGLOBAL['supe_uid']) && !checkperm('closeignore')) {

    if(empty($_SCONFIG['closereason'])) {

      showmessage('site_temporarily_closed');

    } else {

      showmessage($_SCONFIG['closereason']);

    }

  }



  // ipaccess($_SCONFIG['ipaccess']):检查当前用户IP是否是允许访问的IP

  // ipbanned($_SCONFIG['ipaccess']):检查当前用户IP是否是禁止访问的IP



  if((!ipaccess($_SCONFIG['ipaccess']) || ipbanned($_SCONFIG['ipbanned'])) && !ckfounder($_SGLOBAL['supe_uid']) && !checkperm('closeignore')) {

    showmessage('ip_is_not_allowed_to_visit');

  }

}

 

3. ipaccess()和ipbanned()函数

function ipaccess($ipaccess) {

  return empty($ipaccess)?true:preg_match("/^(".str_replace(array("\r\n", ' '), array('|', ''), preg_quote($ipaccess, '/')).")/", getonlineip());

}



function ipbanned($ipbanned) {

  return empty($ipbanned)?false:preg_match("/^(".str_replace(array("\r\n", ' '), array('|', ''), preg_quote($ipbanned, '/')).")/", getonlineip());

}

假设$_SCONFIG['ipbanned']有这样的设置:"10.3.1\r\n10.3.2.5",表达的意思是10.3.1.0~10.3.1.255和10.3.2.5这些地址都不能访问,ipbanned()函数中是这样实现的:

<?php



$ipbanned = "10.3.1\r\n10.3.2.5";

$ip = "10.3.2.6";



$pattern = "/^(" . str_replace(array("\r\n", ' '), array('|', ''), preg_quote($ipbanned, '/')) . ")/";

echo $pattern . '<br/>';



if (preg_match($pattern, $ip))

    echo 'True';

else

    echo 'False';

 

返回的结果:

/^(10\.3\.1|10\.3\.2\.5)/

False

你可能感兴趣的:(home)