PHP 限制访问ip白名单
一 上代码
config.php
//ip白名单配置
'ipWlist'=>[
'ifFilter'=>true, //是否开启白名单功能
'wlist'=>[
'10.0.0.19',
],
'warea1'=>'10.8.0.0/16', //白名单网段1
'warea2'=>'10.12.0.0/16', //白名单网段1
],
commonfunc.php
private function checkIp(){
$user_IP = ($_SERVER["HTTP_VIA"]) ? $_SERVER["HTTP_X_FORWARDED_FOR"] : $_SERVER["REMOTE_ADDR"];
$user_IP = ($user_IP) ? $user_IP : $_SERVER["REMOTE_ADDR"];
$ipC=config('appconf.ipWlist');
if(!$ipC['ifFilter']){
return true;
}
if(in_array($user_IP, $ipC['wlist'])){
return true;
}
if( ! $this->ip_in_network($user_IP, $ipC['warea1'])){
if( ! $this->ip_in_network($user_IP, $ipC['warea2'])){
return false;
}
}
return true;
}
private function ip_in_network($ip, $network)
{
$ip = (double) (sprintf("%u", ip2long($ip)));
$s = explode('/', $network);
$network_start = (double) (sprintf("%u", ip2long($s[0])));
$network_len = pow(2, 32 - $s[1]);
$network_end = $network_start + $network_len - 1;
if ($ip >= $network_start && $ip <= $network_end)
{
return true;
}
return false;
}
二 说明
2.1 获取ip的方式
- $_SERVER["HTTP_VIA"] 有代理服务器的时候,表示代理服务器IP;
- $_SERVER["HTTP_X_FORWARDED_FOR"] 透过代理服务器取得客户端的真实 IP 地址;
- $_SERVER["REMOTE_ADDR"] 正在浏览当前页面用户的 IP 地址
一般来说,开发者对于内部的服务器架构比较了解,简单粗暴的用REMOTE_ADDR即可,因为REMOTE_ADDR不可伪造,更加安全,另外两个字段就没那么靠谱.
2.2 有的童鞋不是用数组的config而是用define
可以用json_encode,序列化,eval()等方式来解决,如下
define("IPFILTER",1);
define('IPWLISTJSON',json_encode(['127.0.0.1',]));
// 业务中
$wlist = json_decode(IPWLISTJSON,1);
define('IPWLIST',"return ['127.0.0.1',];");
// 业务中
$wlist=eval(IPWLIST)
define('IPWLIST',serialize(['127.0.0.1',]));
// 业务中
$wlist=unserialize(IPWLIST);
还可以用string特殊分隔符的explode形式等,这里就不一一举例了
PHP 限制访问ip白名单的更多相关文章
- Windows Azure Web Site (14) Azure Web Site IP白名单
<Windows Azure Platform 系列文章目录> 我们知道,在Azure Cloud Service和Virtual Machine,可以通过Endpoint ACL (Ac ...
- 解决微信公众平台IP白名单
微信公众平台,作为自媒体的旗舰级产品,越来越多的人已经投入它的怀抱.正如它的广告词所说:再小的个体,也有品牌 好吧,闲话不多说,今天要说的是它的IP白名单机制. 我们现在安装的大部分的电信的家庭级别的 ...
- 算法题:实现一个IP白名单过滤器
最近看到一则招聘的JD,附了一个算法题的链接,原题如下: 请实现一个IP白名单过滤算法,实现以下接口 boolean addWhiteIpAddress(String ip); boolean ...
- IP白名单
一.什么是IP白名单 公众平台后台新增了IP白名单功能.通过开发者ID及密码调用获取access_token接口时,需要设置访问来源IP为白名单. IP白名单是指一组IP列表,只有该列表中的IP地址的 ...
- IP白名单的实现(PHP)
有些项目可能会用到一个IP地址的白名单黑名单之类的验证. 比如,只有IP地址在白名单中,才可以访问该系统. 那么此时,白名单的维护,一般是一个文件,里边是一些IP地址(每行一个IP),当然也有的可能是 ...
- IP白名单添加了当前IP,获取access_token时依然报出错误码40164的坑
开发公众号网页时,想要调用微信API接口,令人无奈的是,想要调用各接口都需使用access_token,于是,获取access_token的征途开始了…… 1.开发者基本配置 (1) 公众平台官网登录 ...
- nginx域名访问的白名单配置梳理
在日常运维工作中,会碰到这样的需求:设置网站访问只对某些ip开放,其他ip的客户端都不能访问.可以通过下面四种方法来达到这种效果:1)针对nginx域名配置所启用的端口(比如80端口)在iptable ...
- 对actuator的管理端点进行ip白名单限制(springBoot添加filter)
在我们的SpringCloud应用中,我们会引入actuator来进行管理和监控我们的应用 常见的有:http://www.cnblogs.com/yangzhilong/p/8378152.html ...
- Centos防火墙添加IP白名单
Centos iptables防火墙添加IP白名单,指定IP可访问端口 vi /etc/sysconfig/iptables 以下为我虚拟机的防火墙为例(Centos 7) # sample conf ...
随机推荐
- VUE随手记坑
1.el-select 默认选中的问题 <el-select v-model="temp.audit" placeholder="请选择"> < ...
- SpringBoot安全认证Security
一.基本环境搭建 父pom依赖 <parent> <groupId>org.springframework.boot</groupId> <artifactI ...
- mnist数据集tensorflow实现
TensorFlow——CNN实现MNIST手写体识别 2019年04月08日 21:46:19 星空Ice_ 阅读数 83 文章目录 TensorFlowCNN实现MNIST 1,数据集 2,回 ...
- BGP的地址聚合
aggregate-address ip make——多用于地址聚合命令. 但,因此很容易产生路由环路. 所以多加一个参数. as-set as-set,可以是BGP聚合路不丢失原来的AS-Path属 ...
- 对于AVL树和红黑树的理解
AVL又称(严格)高度平衡的二叉搜索树,也叫二叉查找树.平衡二叉树.window对进程地址空间的管理用到了AVL树. 红黑树是非严格平衡二叉树,统计性能要好于平衡二叉树.广泛的在C++的STL中,ma ...
- 吴裕雄--天生自然JAVA SPRING框架开发学习笔记:Spring DI(依赖注入)的实现方式属性注入和构造注入
依赖注入(Dependency Injection,DI)和控制反转含义相同,它们是从两个角度描述的同一个概念. 当某个 Java 实例需要另一个 Java 实例时,传统的方法是由调用者创建被调用者的 ...
- XML--XSL
参考 http://blog.51cto.com/cnn237111/1345998 https://www.w3.org/TR/2017/REC-xslt-30-20170608/ 声明 把文档声明 ...
- 关于Vue element-ui中诡异问题的解决思路
最近在做Element-ui项目时总是会出现些异步及其一些诡异问题,关于vue 的异步原理就不多说了,感觉大部分的问题都可以用Vue.nextTick来解决,Vue.nextTick是等DOM二次加载 ...
- clion 的 安装 变量配置的 搬运工(有点基础应该能看 大家看不懂 就是我自己看 哈哈哈哈哈哈)
1 自行安装一个 clion 2 https://blog.csdn.net/u013023297/article/details/80723847 mingw 的配置 第二篇好像当时 ...
- Q1:Two Sum
1. Two Sum 官方的链接:1. Two Sum Description : Given an array of integers, return indices of the two numb ...