zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    Unity使Text 文字逐个出现
    Mybatis入门
    sqoop工具介绍(hdfs与关系型数据库进行数据导入导出)
    MapReduce经典入门小案例
    hdfs的java接口简单示例
    Mac环境下安装配置Hadoop伪分布式
    【转】深入理解javascript原型和闭包(完结)
    javascript面向对象一:函数
    【转】sql语句的优化分析
    【转】java调用存储过程和函数
  • 原文地址:https://www.cnblogs.com/eastson/p/2837882.html
Copyright © 2011-2022 走看看