• 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
  • 相关阅读:
    Forms Authentication Against An XML File
    ADO.NET 2.0 中的新增 DataSet 功能
    转一篇:是什么导致了业务人员和技术人员的矛盾?
    谁说雨中登泰山别有一番风味的????
    缓存用户控件输出的多个版本
    Creating Collection Classes in C#
    Why Create a DataSet, use a DataTable
    Adding Relationships to DataTables
    读取手机联系人和SIM卡联系人
    Android移动动画的参数
  • 原文地址:https://www.cnblogs.com/eastson/p/2837882.html
Copyright © 2020-2023  润新知