calmip / gramc3

GNU General Public License v3.0
0 stars 2 forks source link

Easier IP restriction in dev mode #9

Open vignemail1 opened 3 years ago

vignemail1 commented 3 years ago

Description du problème

Le mode dev requiert de saisir dans un fichier adresses.txt la liste des adresses IP individuelles pour autoriser l'accès au mode dev. Dans un contexte dual stack (IPv4 et IPv6 par poste) et/ou de taille de réseau parfois grand (par exemple /24 pour IPv4 et /64 pour IPv6), il serait intéressant d'utiliser des fonctions qui permettraient de detecter si l'IP du visiteur fait partie d'une liste d'IP et/ou subnets (IPv4 et/ou IPv6).

Proposition de solution

Il existe un module qui peut être facilement chargé avec composer pour étendre les fonctionnalités de traitement des adresses IPv4 et IPv6 et notamment tester si une adresse est dans un subnet, ce qui permettrait de saisir des adresses et/ou subnets IPv4 et IPv6 dans le fichiers adresses.txt afin d'arriver à un résultat plus compact.

URL : https://packagist.org/packages/mlocati/ip-lib

Comme le fichier index.php, qui réalise le test, charge le fichier bootstrap.php qui charge l'autoloader, les fonctions du module seraient directement accessibles.

vignemail1 commented 3 years ago

En ajoutant également un filtrage des lignes commençant par "#" et finissant par un commentaire, cela permet de garder des commentaires dans le fichier afin de facilement identifier les associations/usages des IP tout en gardant la liste des IP.

// On retire tout espace en trop au début et fin de chaine avant les étapes de filtrage
$adresses_ip = array_map('trim', $adresses_ip);
// On retire toute entrée commençant par un #
$adresses_ip = array_filter($adresses_ip, function($val) { return !preg_match('/^\s*#/', $val); } );
// On retire les commentaires en fin de lignes
$adresses_ip = array_map(function($val) { return preg_replace('/\s*#.*$/', $val); }, $adresses_ip );
// On retire tout espace en trop au début et fin de chaine suite aux étapes de filtrage précédentes
$adresses_ip = array_map('trim', $adresses_ip);