Je dois terminer une application WEB qui ne doit fonctionner que dans un environnement local. Ainsi l'utilisateur doit se connecter depuis un poste local (IP de classe C ie. 192.168) ou depuis un poste distant connecté en VPN (IP de classe A ie. 10.X.X).
J'ai donc créer cette méthode (inclue dans une classe) pour vérifier si l'adresse IP était locale ou localhost (tache cron sur l'application):
public function isAdresseIpLocal ($ip=false) {
//vérifie si l'adresse IPV4 ou V6 est locale ou localhost
if (empty($ip))
if (!empty($_SERVER['HTTP_CLIENT_IP']))
$ip = $_SERVER['HTTP_CLIENT_IP'];
elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
elseif (isset($_SERVER['REMOTE_ADDR']) && !empty($_SERVER['REMOTE_ADDR']))
$ip = $_SERVER['REMOTE_ADDR'];
else {
return false;
}
if (in_array($ip,array('127.0.0.1','::1')))
return true;
elseif (!filter_var($ip, FILTER_VALIDATE_IP,FILTER_FLAG_NO_PRIV_RANGE))
return true;
elseif (!empty($this->tabIpExceptions) && is_array($this->tabIpExceptions) && in_array($ip,$this->tabIpExceptions))
return true;
else {
return false;
}
}
La détection en local s'effectue bien mais quand l'utilisateur se connecte en VPN via linux (uniquement linux), l'adresse IP ipV4 détectée est celle public, c'est à dire, celle d'Orange ou d'OVH par exemple.
J'ai créé un tableau d'exceptions mais cela oblige le Webmaster à vérifier si l'adresse IP public est dynamique ou statique (surtout avec Orange).
Est ce un problème de code PHP, de configuration ou de routage Linux ?
Comment tester ?