zoukankan      html  css  js  c++  java
  • 限制非安全IP访问

    这个是一个检测ip是否非法的php函数,适应于白名单,黑名单功能开发,主要场景应用于:api来源限制,访问限制等.
    /**
     * 安全IP检测,支持IP段检测
     * @param string $ip 要检测的IP
     * @param string|array $ips  白名单IP或者黑名单IP
     * @return boolean true 在白名单或者黑名单中,否则不在
     */
     function is_safe_ip($ip="",$ips=""){
        if(!$ip) $ip = get_client_ip();  //获取客户端IP
        if($ips){
            if(is_string($ips)){ //ip用"," 例如白名单IP:192.168.1.1,123.23.23.1,193.134.*.*
                $ips = explode(",", $ips);
            }
        }else{ //读取后台配置 白名单IP
            $obj = new Setting();
            $ips = explode(",", $obj->getConfig("whiteip")); 
        }
        if(in_array($ip, $ips)){
            return true;
        }
        $ipregexp = implode('|', str_replace( array('*','.'), array('d+','.') ,$ips)); 
        $rs = preg_match("/^(".$ipregexp.")$/", $ip); 
        if($rs) return true;
        return ;
     }
    
    
     function get_client_ip() {
      if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) {
         $ip = getenv('HTTP_CLIENT_IP');
      } elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) {
         $ip = getenv('HTTP_X_FORWARDED_FOR');
      } elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) {
         $ip = getenv('REMOTE_ADDR');
      } elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) {
         $ip = $_SERVER['REMOTE_ADDR'];
      }
      return preg_match ( '/[d.]{7,15}/', $ip, $matches ) ? $matches [0] : '';
     }
  • 相关阅读:
    hibernate各种状态
    Persistence createEntityManagerFactory方法使用
    JS数组学习笔记
    ES6笔记之参数默认值(译)
    JS是按值传递还是按引用传递?
    linux awk命令详解
    Linux Shell笔记之sed
    类似微信红包随机分配js方法
    ionic tabs隐藏完美解决
    mustache 获取json数据内数组对象指定元素的方法
  • 原文地址:https://www.cnblogs.com/qhorse/p/4838204.html
Copyright © 2011-2022 走看看