php实现ip白名单黑名单功能


Posted in PHP onMarch 12, 2015

这个是一个检测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.13,123.23.23.44,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 ;

}

获取ip地址,这里引用thinkphp内置函数

//应网友要求,贴出 get_client_ip() 函数

/**

 * 获取客户端IP地址

 * @param integer $type 返回类型 0 返回IP地址 1 返回IPV4地址数字

 * @param boolean $adv 是否进行高级模式获取(有可能被伪装) 

 * @return mixed

 */

function get_client_ip($type = 0,$adv=false) {

    $type       =  $type ? 1 : 0;

    static $ip  =   NULL;

    if ($ip !== NULL) return $ip[$type];

    if($adv){

        if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {

            $arr    =   explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);

            $pos    =   array_search('unknown',$arr);

            if(false !== $pos) unset($arr[$pos]);

            $ip     =   trim($arr[0]);

        }elseif (isset($_SERVER['HTTP_CLIENT_IP'])) {

            $ip     =   $_SERVER['HTTP_CLIENT_IP'];

        }elseif (isset($_SERVER['REMOTE_ADDR'])) {

            $ip     =   $_SERVER['REMOTE_ADDR'];

        }

    }elseif (isset($_SERVER['REMOTE_ADDR'])) {

        $ip     =   $_SERVER['REMOTE_ADDR'];

    }

    // IP地址合法验证

    $long = sprintf("%u",ip2long($ip));

    $ip   = $long ? array($ip, $long) : array('0.0.0.0', 0);

    return $ip[$type];

}

以上就是本文的全部内容了,希望对大家理解php检测IP有所帮助。

PHP 相关文章推荐
PHP 危险函数解释 分析
Apr 22 PHP
php中选择什么接口(mysql、mysqli)访问mysql
Feb 06 PHP
php学习笔记之面向对象
Nov 08 PHP
php数组键名技巧小结
Feb 17 PHP
PHP二维数组矩形转置实例
Jul 20 PHP
PHP入门教程之PHP操作MySQL的方法分析
Sep 11 PHP
PHP经典算法集锦【经典收藏】
Sep 14 PHP
详解PHP安装mysql.so扩展的方法
Dec 31 PHP
PHP新特性之字节码缓存和内置服务器
Aug 11 PHP
php-fpm.conf配置文件中文说明详解及重要参数说明
Oct 10 PHP
laravel 查询数据库获取结果实现判断是否为空
Oct 24 PHP
php设计模式之组合模式实例详解【星际争霸游戏案例】
Mar 27 PHP
php操作(删除,提取,增加)zip文件方法详解
Mar 12 #PHP
PHP往XML中添加节点的方法
Mar 12 #PHP
PHP遍历XML文档所有节点的方法
Mar 12 #PHP
标准PHP的AES加密算法类
Mar 12 #PHP
php接口数据加密、解密、验证签名
Mar 12 #PHP
php查询相似度最高的字符串的方法
Mar 12 #PHP
PHP实现通用alert函数的方法
Mar 11 #PHP
You might like
第六节--访问属性和方法
2006/11/16 PHP
分享一段php获取linux服务器状态的代码
2014/05/27 PHP
php使用GeoIP库实例
2014/06/27 PHP
做网页的一些技巧(续)
2007/02/01 Javascript
学习js所必须要知道的一些
2007/03/07 Javascript
JS弹出窗口代码大全(详细整理)
2012/12/21 Javascript
教你在heroku云平台上部署Node.js应用
2014/07/30 Javascript
javascript实现获取字符串hash值
2015/05/10 Javascript
javascript获取select标签选中的值
2016/06/04 Javascript
异步加载JS、CSS代码(推荐)
2016/06/15 Javascript
Vue.js做select下拉列表的实例(ul-li标签仿select标签)
2018/03/02 Javascript
vue 标签属性数据绑定和拼接的实现方法
2018/05/17 Javascript
小程序文字跑马灯效果
2018/12/28 Javascript
使用React手写一个对话框或模态框的方法示例
2019/04/25 Javascript
uin-app+mockjs实现本地数据模拟
2020/08/26 Javascript
[00:20]DOTA2荣耀之路7:-ah fu-抢盾
2018/05/31 DOTA
python中将字典转换成其json字符串
2014/07/16 Python
python实现图片变亮或者变暗的方法
2015/06/01 Python
疯狂上涨的Python 开发者应从2.x还是3.x着手?
2017/11/16 Python
利用numpy和pandas处理csv文件中的时间方法
2018/04/19 Python
django有外键关系的两张表如何相互查找
2020/02/10 Python
详解使用python3.7配置开发钉钉群自定义机器人(2020年新版攻略)
2020/04/01 Python
Python+redis通过限流保护高并发系统
2020/04/15 Python
python与idea的集成的实现
2020/11/20 Python
canvas实现有递增动画的环形进度条的实现方法
2019/07/10 HTML / CSS
HTML5安全介绍之内容安全策略(CSP)简介
2012/07/10 HTML / CSS
美国著名珠宝品牌之一:Jared The Galleria Of Jewelry
2016/10/01 全球购物
建筑设计师岗位职责
2013/11/18 职场文书
综合办公室主任职责
2013/12/16 职场文书
大学生毕业求职自荐书范文
2014/02/04 职场文书
卫校毕业生个人自我鉴定
2014/04/28 职场文书
小学班主任个人总结
2015/03/03 职场文书
党员转正申请报告
2015/05/15 职场文书
给校长的建议书作文400字
2015/09/14 职场文书
Feign调用传输文件异常的解决
2021/06/24 Java/Android
Windows Server 2012 修改远程默认端口3389的方法
2022/04/28 Servers