现在的位置: 首页 > 综合 > 正文

UCHome: IP控制

2012年06月27日 ⁄ 综合 ⁄ 共 1726字 ⁄ 字号 评论关闭

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

抱歉!评论已关闭.