| 名稱 | IP白名單 |
| 版本號(hào) | V1.0 |
| 應(yīng)用編號(hào) | APP921 |
| 應(yīng)用類型 | 插件 |
| 發(fā)布時(shí)間 | 2022-02-21 14:28:41 |
| 更新時(shí)間 | 2022-04-01 15:19:23 |
| 插件類型 | 工具類 |
| 功能類別 | 工具 安全 |
| 依賴場(chǎng)景 | 不依賴于任何插件 |
| 源碼加密 | 未加密 |
| 技術(shù)保障 | 開源版源碼由迅睿開源社區(qū)免費(fèi)提供,官方不提供售后服務(wù) |
| 支持瀏覽器 | Chromium內(nèi)核瀏覽器、Chrome、Edge、Firefox、Safari、Opera等 |
安裝后通過(guò)設(shè)置ip白名單實(shí)現(xiàn)只允許指定IP訪問后臺(tái)。
IP設(shè)置錯(cuò)誤后可以通過(guò)訪問:http://域名/index.php?s=iplist&c=home自動(dòng)授權(quán)當(dāng)前IP。
實(shí)現(xiàn)原理:通過(guò)后臺(tái)登陸之前鉤子來(lái)實(shí)現(xiàn)IP限制。
使用方法:后臺(tái)下載安裝后把下面的代碼添加到自定義鉤子文件(/config/hooks.php)中
\Phpcmf\Hooks::on('admin_login_before', function($post) {
$cz = \Phpcmf\Service::M()->db->tableExists(\Phpcmf\Service::M()->dbprefix('iplist'));
if($cz){
$rts = \Phpcmf\Service::M()->db->table('iplist')->where('status', 2)->countAllResults();
if($rts==0){
}else{
if (getenv("HTTP_CLIENT_IP"))
$ip = getenv("HTTP_CLIENT_IP");
else if(getenv("HTTP_X_FORWARDED_FOR"))
$ip = getenv("HTTP_X_FORWARDED_FOR");
else if(getenv("REMOTE_ADDR"))
$ip = getenv("REMOTE_ADDR");
else $ip = "Unknow";
$rt = \Phpcmf\Service::M()->db->table("iplist")->where("status", "2")->select("ip")->get();
if ($rt) {
$rows = $rt->getResultArray();
foreach ($rows as $t) {
$array[] = $t['ip'];
}
}
$iplists = $array;
$ALLOWED_IP=$iplists;
#$ALLOWED_IP=array('113.128.218.*','192.168.*.*');
//允許訪問的ip
$check_ip_arr= explode('.',$ip);
//ip參數(shù)拆分成數(shù)組
if(!in_array($ip,$ALLOWED_IP)) {
$bl=false;
foreach ($ALLOWED_IP as $val){
if(strpos($val,'*')!==false){
//發(fā)現(xiàn)有*號(hào)替代符
$arr=array();
$arr=explode('.', $val);
$bl=true;
//用于記錄循環(huán)檢測(cè)中是否有匹配成功的
for ($i=0;$i<4;$i++){
if($arr[$i]!='*'){
//不等于* 就要進(jìn)來(lái)檢測(cè),如果為*符號(hào)替代符就不檢查
if($arr[$i]!=$check_ip_arr[$i]){
$bl=false;
break;
//終止檢查本個(gè)ip 繼續(xù)檢查下一個(gè)ip
}
}
}
//end for
if($bl){
//如果是true則終止匹配
break;
}
}
}
//end foreach
if(!$bl){
$return=array(
'status'=>0,
'msg'=>$ip.'無(wú)權(quán)限訪問',
'data'=>$iplists
);
echo json_encode($return);
exit();
}
}
}
}
});

