Quelqu'un sait d'une méthode efficace et sûre pour voir si cette entrée:Une méthode optimisée pour comparer les adresses IP avec des caractères génériques en PHP?
$_SERVER['REMOTE_ADDR']
matchs contre quelque chose de similaire à ce tableau de filtres incohérents (notez que 200,100 * * pourrait être exprimé en seulement 200,100 *...) avec des caractères génériques indiqués par * 's:
array(
'192.168.1.*',
'192.168.2.1*',
'10.0.0.*',
'200.100.*.*',
'300.200.*',
)
Mise à jour
pensées?
foreach($instanceSettings['accessControl']['allowedIpV4Addresses'] as $ipV4Address) {
echo 'Now checking against '.$ipV4Address.'.';
// Compare each octet
$ipV4AddressOctets = String::explode('.', $ipV4Address);
$remoteIpV4AddressOctets = String::explode('.', $_SERVER['REMOTE_ADDR']);
$remoteIpV4AddressIsAllowed = true;
for($i = 0; $i < Arr::size($ipV4AddressOctets); $i++) {
echo 'Comparing '.$ipV4AddressOctets[$i].' against '.$remoteIpV4AddressOctets[$i].'.';
if($ipV4AddressOctets[$i] != $remoteIpV4AddressOctets[$i] && $ipV4AddressOctets[$i] != '*') {
echo 'No match.';
$remoteIpV4AddressIsAllowed = false;
break;
}
}
// Get out of the foreach if we've found a match
if($remoteIpV4AddressIsAllowed) {
break;
}
}
est-il possible pour vous de spécifier également netmask de chaque adresse IP? c'est-à-dire: «192.168.100.251/26» ou «192.168.100».251 '=>' 26'' (ce masque de 26 bits peut même ne pas être valide pour l'adresse IP donnée, par exemple) Si vous pouvez spécifier des masques de réseau, alors calculer la validité de l'adresse IP est aussi simple que si ($ first_addr_of_mask> $ ip && $ last_addr_of_mask <$ ip) ' – Oerd
Je ne le ferais pas en PHP mais plutôt sur le pare-feu du serveur. – hornetbzz