PHP中多IP段权限控制方案

  在某些项目中我们可能会用到根据IP段进行权限校验,比如不在我们配置的IP段内的用户访问某些页面或功能模块时,将提示其权限不够并禁止访问该页面的内容。鉴于项目中需求各异,下面只说下大致思路以及我个人的实现方式:

1. 在一个功能模块设计之初,我们应该让它尽可能易于配置,易于使用,易于应用到更多场景中,这里我们采用配置和校验函数分离的方式,将权限校验的代码都写在一个依赖配置数组能独立运行的函数中。

2. 我的思路是多IP段校验过程中,如果被校验的IP不在配置项的所有IP段中,则返回false, 禁止访问,如果被校验的IP在配置项的任意一项中,则终止校验,返回true,允许访问。

3. 我们在每一个IP段的校验中,依次对这一个IP段的四个部分进行校验,如果第一部分正确,则继续校验第二部分,如果遇到校验不通过的部分,则中止这个IP段的校验,进入下一个IP段的校验,如果这一个IP段的四部分校验都通过,则该IP段的校验通过,不再对接下来的其他IP段进行校验,返回true,允许访问。

有点绕?没事,话不重要,看代码:

 1 <?php
 2 function IpAuth($ip, $config){
 3     $ipArr = explode(".", $ip);
 4     for ( $i=0; $i<count($config); $i++ ){
 5         $ips = explode(".", $config[$i][‘start‘]);
 6         $ipe = explode(".", $config[$i][‘end‘]);
 7         for( $j=0; $j<4; $j++ ){
 8             if( $ips[$j]==$ipArr[$j] || $ipArr[$j]==$ipe[$j] ){
 9                 if($j == 3){
10                     return true;
11                 }else{
12                     continue;
13                 }
14             }else if( $ips[$j]<$ipArr[$j] && $ipArr[$j]<$ipe[$j] ){
15                 return true;
16             }else{
17                 continue 2;
18             }
19         }
20     }
21     return false;
22 }
23  ?>

4. 配置文件实例如下:

1 <?php
2 $ip_config = array(
3     array("start" => ‘120.11.11.11‘, "end" => ‘120.255.255.255‘),
4     array("start" => ‘127.0.0.1‘, "end" => ‘127.0.255.255‘)
5 );
6
7 ?>

5. php获取访问者IP字段方法:

1 $ip = $_SERVER[‘REMOTE_ADDR‘];

6. 调用方式:

1 $result = IpAuth($ip, $ip_config);

返回true为校验通过,返回false为校验不通过

时间: 2024-10-14 06:51:00

PHP中多IP段权限控制方案的相关文章

系统权限控制——菜单级别的权限控制方案

系统如果有许多用户,有时候需要针对不同用户进行菜单级别的权限控制. 下面的数据库设计实现了菜单级别的控制,可以作为一个参考: 其中读取页面时,页面中的action从Menu表中读取,而在powerofaction表中存储权限Power表与Aciton的关系. 系统权限控制--菜单级别的权限控制方案

前后端分离模式下的权限控制方案

在前后端分离的模式下,所有的交互场景都变成了数据交互,因此传统业务系统中的权限控制方案在前端已经不再适用(比如使用后台模板标签进行权限控制),需要另外设计权限控制方案. 权限控制的概念 要理解权限控制,需要明白两个概念:资源和权限. 资源:对于一个系统来说,系统内部的所有信息都可以理解为是这个系统的资源.页面是资源.数据是资源.按钮是资源.图片也是资源. 权限:权限就是访问某个资源所需要的标识.无论系统的权限如何设计,在用户登陆的时候都需要计算当前登陆用户所拥有的权限标识集合,这样才能确定这个用

php中限制ip段访问、禁止ip提交表单的代码

在需要禁止访问或提交表单的页面添加下面的代码进行判断就可以了. 注意:下边只是一个PHP限制IP的实例代码,如果您打算应用到CMS中,请自行修改. <?php /加IP访问限制 if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) { $userip = getenv('HTTP_CLIENT_IP'); } elseif(getenv('HTTP_X_FORWARDED_FOR

权限控制方案之——基于URL拦截

概述: 在系统开发过程中需要考虑的一个重要的问题就是权限问题,权限问题也是安全问题的一个范畴,我们要求在用户登录系统之后,要控制用户可以访问的系统资源,使得用户只可以访问到系统事先分配好的资源:这里的资源可以是一个URL地址,也可以是页面上的菜单和按钮等.对于实现权限的控制有多种方案,这里说明一下通过URL拦截的方式进行权限控制的实现方案. 基本流程: 对于权限的控制可以分为两个步骤:认证和授权. 认证:即用户登录系统的时候对用户的身份信息进行判别. 授权:即在用户登录成功后为用户分配用户可以访

django中的权限控制

Django默认提供了权限控制,但只能对使用了其自带的登录认证的用户进行权限控制,说白了就是只能对存储在auth_user表中的用户进行权限控制,但不能对未登录过的用户进行权限控制.但如果通过集成LDAP认证后的用户,其用户也会被缓存到该表中,即变相实现了AD用户也能进行权限控制. 权限是auth 应用中定义的Permission类型:User与Permission是many-to-many的关系. Django对于每个模型类,自动增加add.change.delete三种权限,以便于权限控制.

&lt;实训|第九天&gt;掌握linux中普通的权限控制和三种特殊的权限(sst),做合格的运维工程师

linux中,权限的学习是必不可少的,不论是作为一名运维工程师或者是单一的管理者,学习好linux中的权限控制,你就可以保护好自己的隐私同时规划好你所管理的一切. 权限的学习是很多的,不要认为自己已经把自己的隐私保护的很好,漏洞总是有的,侧面的攻击往往是难以防守的.所以大家跟我一起学习一下基础的权限控制,在后面也会有更多关于权限控制的知识点分享出来.谢谢各位的关注和支持!  开班第九天: 今天的课程大纲: linux系统中文件目录的基本权限控制 如何来修改默认的生成权限 三种特殊的权限(s,s,

C++成员权限控制(总结)

1) 前言 在我学习C++的过程中,类中成员的权限控制一直是比较头疼的一个点,一会public,一会又private,还有protected,再加点继承,而且又有公有继承.私有继承,保护继承,所以感觉会比较乱. 后来不断学习过程中,慢慢理顺了它们的关系,稍微分类总结一下,在这个问题上基本上就没再栽过跟头.如有笔误,希望大神指点一下! 2 )C++的水平权限控制 首先解释几个特定词,下面要用到: 水平权限:在一个类中,成员的权限控制,就是类中的成员函数能否访问其他成员.类的对象能否访问类中某成员.

django(权限、认证)系统——第三方组件实现Object级别权限控制

在我的系列blog<Django中内置的权限控制>中明确提及到,Django默认并没有提供对Object级别的权限控制,而只是在架构上留了口子.在这篇blog中,我们探讨一个简单流行的Django组件django-guardian来实现Object level permission. 安装配置django-guardian 首先需要安装django-guardian,一般我们喜欢用virtualenv创建一个虚拟环境: >>virtualenv --distribute venv

Linux学习总结(14)——Linux权限控制

linux中,权限的学习是必不可少的,不论是作为一名运维工程师或者是单一的管理者,学习好linux中的权限控制,你就可以保护好自己的隐私同时规划好你所管理的一切. 权限的学习是很多的,不要认为自己已经把自己的隐私保护的很好,漏洞总是有的,侧面的攻击往往是难以防守的.所以大家跟我一起学习一下基础的权限控制,在后面也会有更多关于权限控制的知识点分享出来.谢谢各位的关注和支持! 开班第九天: 今天的课程大纲: linux系统中文件目录的基本权限控制 如何来修改默认的生成权限 三种特殊的权限(s,s,t