From f00e0618ec7d64c691a9e6f2fb57d549166c7d45 Mon Sep 17 00:00:00 2001 From: chschy Date: Thu, 8 Sep 2011 06:08:44 +0000 Subject: [PATCH] Apply admin ip check git-svn-id: http://xe-core.googlecode.com/svn/branches/1.5.0@9111 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- classes/module/ModuleHandler.class.php | 8 +++++++- modules/module/conf/module.xml | 2 ++ modules/module/module.admin.model.php | 27 ++++++++++++++++++++++++++ 3 files changed, 36 insertions(+), 1 deletion(-) diff --git a/classes/module/ModuleHandler.class.php b/classes/module/ModuleHandler.class.php index eccfa155a..6f56f537c 100644 --- a/classes/module/ModuleHandler.class.php +++ b/classes/module/ModuleHandler.class.php @@ -197,6 +197,11 @@ if(!$kind && $this->module == 'admin') $kind = 'admin'; if($this->module_info->use_mobile != "Y") Mobile::setMobile(false); + if($kind == 'admin'){ + $oModuleAdminModel = &getAdminModel('module'); + if(!$oModuleAdminModel->getModuleAdminIPCheck()) return false; + } + // if(type == view, and case for using mobilephone) if($type == "view" && Mobile::isFromMobilePhone() && Context::isInstalled()) { @@ -377,7 +382,8 @@ if ($message != 'success') $_SESSION['XE_VALIDATOR_MESSAGE'] = $message; $_SESSION['XE_VALIDATOR_MESSAGE_TYPE'] = $messageType; $_SESSION['XE_VALIDATOR_RETURN_URL'] = $redirectUrl; - } + } + return $oModule; } diff --git a/modules/module/conf/module.xml b/modules/module/conf/module.xml index a2cc4a21c..29116ede9 100644 --- a/modules/module/conf/module.xml +++ b/modules/module/conf/module.xml @@ -30,8 +30,10 @@ + + diff --git a/modules/module/module.admin.model.php b/modules/module/module.admin.model.php index 51faeada4..7ea4c10f0 100644 --- a/modules/module/module.admin.model.php +++ b/modules/module/module.admin.model.php @@ -261,5 +261,32 @@ return $this->getLangListByLangcode($args); } + function getModuleAdminIPCheck() { + + $db_info = Context::getDBInfo(); + $admin_ip = $db_info->admin_ip; + + if(preg_match('/^(\d{1,3}(?:.(\d{1,3}|\*)){3})$/', $admin_ip, $matches)) { + if(!empty($_SERVER['HTTP_CLIENT_IP']) && getenv('HTTP_CLIENT_IP')){ + $ip = $_SERVER['HTTP_CLIENT_IP']; + } + else if(!empty($_SERVER['HTTP_X_FORWARDED_FOR']) && getenv('HTTP_X_FORWARDED_FOR')){ + $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; + } + else if(!empty($_SERVER['REMOTE_HOST']) && getenv('REMOTE_HOST')){ + $ip = $_SERVER['REMOTE_HOST']; + } + else if(!empty($_SERVER['REMOTE_ADDR']) && getenv('REMOTE_ADDR')){ + $ip = $_SERVER['REMOTE_ADDR']; + } + if($ip) { + $admin_ip = str_replace('*','',$admin_ip); + $admin_ip_patterns[] = preg_quote($admin_ip); + $admin_ip_pattern = '/^('.implode($admin_ip_patterns,'|').')/'; + if(!preg_match($admin_ip_pattern, $ip, $matches)) return false; + } + } + return true; + } } ?>