php redis ip查找,php+redis实现ip白名单并提供可配置ip页面
ip白名单或者黑名单,目的是为了达到一种受限访问,希望在名单内用户可以访问,就把名单叫白名单;希望在名单内用户拒绝访问,就是黑名单。无论我们希望使用哪种名单方式,实现方式都一样。
在nginx下我们通常会考虑用nginx+lua的方式来实现,它很优雅速度快。确实,这是一种方案,我也做过这种方案的研究。但我觉的它不够灵活,我选择在应用程序中来实现名单机制。
主要思路:用户->获取ip->redis取出名单库->比对->处理
控制访问
isAccess();
/**
* 检测是否在白名单内,否则拒绝访问
*
* @return void
*/
function isAccess(){
$ip = getRemoteIp();
if(!empty($ip)) {
$inst = new Redis();
$inst->connect('127.0.0.1', 6379);
$ip_white_list = $inst->sMembers('ip_blacklist');
if(!in_array($ip, $ip_white_list)) {
echo '
HTTP/1.1 403 Forbidden
';
header('HTTP/1.1 403 Forbidden');
}
}
}
/**
* 获取用户的IP
*
* @return void
*/
function getRemoteIp(){
if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
}elseif(isset($_SERVER['HTTP_CLIENT_IP'])){
$ip = $_SERVER['HTTP_CLIENT_IP'];
}elseif(getenv('HTTP_X_FORWARDED_FOR')){
$ip = getenv('HTTP_X_FORWARED_FOR');
}elseif(getenv('HTTP_CLIENT_IP')){
$ip = getenv('HTTP_CLIENT_IP');
}elseif($_SERVER['REMOTE_ADDR']){
$ip = $_SERVER['REMOTE_ADDR'];
}
else{
$ip = null;
}
return $ip;
}
动态配置页面
$inst = new Redis();
$inst->connect('127.0.0.1', 6379);
$ip = $inst->sMembers('ip_blacklist');
$li = '';
foreach($ip as $val) {
$li .= '
'.$val.' delete';
}
?>
ul,li {
list-style: none;
}
ul {
margin: 0;
padding: 0;
}
li {
padding: 5px;
padding-top:0;
}
add
$(function(){
// 删除
$('#ipList').on('click','.js_del',function(){
var _this = this,
ip_text = $(this).attr('data');
$.ajax({
url: 'http://localhost:6699/ip-white-php/ip.php',
method: 'POST',
data: 'type=delete&ip='+ip_text,
success: function(res){
if(res == 1){
alert('success');
$(_this).parent().remove();
} else {
alert('failed');
}
}
})
})
// 添加
$('#submit').click(function(){
var ip_text = $("input[type=text]").val(),
re = /^\d{2,3}.\d{2,3}.\d{2,3}.\d{1,3}$/;
if (!re.test(ip_text)) {
alert('您输入的IP格式不对');
return;
}
$.ajax({
url: 'http://localhost:6699/ip-white-php/ip.php',
method: 'POST',
data: 'type=add&ip='+ip_text,
success: function(res){
if(res == 1){
alert('success');
$('#ipList').append('
'+ip_text+' delete')
} else {
alert('failed');
}
}
})
})
})
配置页面接口
$inst = new Redis();
$inst->connect('127.0.0.1', 6379);
$type = isset($_POST['type']) ? $_POST['type'] : '';
$ip = isset($_POST['ip']) ? $_POST['ip'] : '';
if(!empty($ip)){
$isExist = $inst->sIsMember('ip_blacklist',$ip);
if($isExist) {
if($type == 'delete'){
// delete
$rs = $inst->sRemove('ip_blacklist',$ip);
echo $rs;
}
} else {
if($type == 'add'){
if(preg_match('/^\d{2,3}.\d{2,3}.\d{2,3}.\d{1,3}$/',$ip)) {
$rs = $inst->sAdd('ip_blacklist',$ip);
echo $rs;
} else {
echo 2;
}
}
}
}
php redis ip查找,php+redis实现ip白名单并提供可配置ip页面相关推荐
- java ip 白名单_Java代码中对IP进行白名单验证
public classipUtil {//IP的正则,这个正则不能验证第一组数字为0的情况//private static Pattern pattern = Pattern//.compile(& ...
- IP白名单(iptables + ipset :允许国内ip + 自定义ip 访问系统udp端口)
########################## ## IP白名单(iptables + ipset :允许国内ip + 自定义ip 访问系统udp端口) #################### ...
- nginx设置IP、文件目录、请求头白名单
1.重点 2.测试环境 3.设置IP白名单 禁止多个ip 4.禁止访问某个目录 路径匹配符号 5.禁止访问某个目录的单个文件 6.请求头白名单 7.设置对应响应码的返回页面 1.重点 location ...
- nginx - ip 限制规则、黑名单、白名单
一.配置 ip 限制时的注意事项 #注意事项: # 1. deny 一定要加一个ip,否则直接跳转到403,不往下执行了;如果403默认页是同一域名下,会造成死循环访问: # 2. allow的ip段 ...
- vb.net 判断是否为ip 正则_PHP实现IP白名单
有些项目可能会用到一个IP地址的白名单黑名单之类的验证. 比如,只有IP地址在白名单中,才可以访问该系统. 那么此时,白名单的维护,一般是一个文件,里边是一些IP地址(每行一个IP),当然也有的可能是 ...
- IP白名单添加了当前IP,获取access_token时依然报出错误码40164的坑
开发公众号网页时,想要调用微信API接口,令人无奈的是,想要调用各接口都需使用access_token,于是,获取access_token的征途开始了-- 1.开发者基本配置 (1) 公众平台官网登录 ...
- 如何将风险应用加入白名单_将微信服务器、API接口的IP列表加入宝塔防火墙IP白名单...
WordPress 一直是一个最棒的 CMS 内容管理系统,也能够非常轻松的跟微信公众号等进行对接,那么为了防止防火墙将微信功能误拦,我们需要将微信服务器.API 接口 的 IP 列表加入白名单.由于 ...
- Oracle数据库IP访问限制(IP白名单黑名单)
1.编辑sqlnet.ora 内容为: #允许访问的IP(白名单) TCP.INVITED_NODES=(127.0.0.1,192.168.56.109,ip2,ip3,..,..本地IP..)若使 ...
- IP暴露接口IP白名单设置
暴露接口IP白名单设置 暴露接口IP白名单设置 CrazyL- 2018-01-03 14:36:15 4797 收藏 1 展开 String realIp = IPUtil.getIpAddr( ...
最新文章
- Spring boot注入配置为java静态属性
- python中http_Python中HTTP协议
- 高效使用Vector
- 安装gcc 4.8.2 for cxx 11
- 【蓝桥杯Java_C组·从零开始卷】第八节、综合测试
- jmeterhttp代理服务器_Jmeter使用HTTP代理服务器录制
- MOOC推荐及三门基础学科
- 快速切题 cf118A
- 工程力学考研 可以转计算机专业吗,跨专业考研我是工程力学的本科生,想要考飞行 – 手机爱问...
- 破解版果冻手机动画主题for WM5 WM6
- 计算机excel怎么添加实线边框,给excel表格添加边框线
- Google Android8.1镜像WIFI提示“已连接但无法访问互联网“的解决办法
- 8核、6核、4核、双核CPU是什么意思
- SQL2005导入数据至2000的问题
- win10系统 如何设置定时开关机?
- [图像]中值滤波(Matlab实现)
- 从信息泄露到权限后台
- C语言中强制数据类型转换
- 【Unity3D】Unity3D技术栈
- Python实现多个PDF合并,超好用,run它
热门文章
- [crypto]-31-crypto engion的学习和总结
- 爬虫的基本知识第一个请求requests模块的基本使用
- 11、流程控制语句详解,IF,CASE,LOOP,LEAVE, ITERATE,REPEAT,WHILE
- Python借助队列实现进程通信
- 2.2 进阶-禁忌雷炎
- mysql 主从同步 工具_mysql主从同步工具maatkit安装
- 眼图在通信系统中有什么意义_解读CRM系统在企业中有什么作用
- 一次关于 Mysql 索引优化的思考
- 听说用 Lombok 可以早点下班?
- 蓝桥杯第五届决赛真题大全解(java版本)