Qualcuno sa di un metodo efficace e sicuro per vedere se questo ingresso:Un metodo ottimizzato per confrontare gli indirizzi IP con i caratteri jolly in PHP?
$_SERVER['REMOTE_ADDR']
partite contro qualcosa di simile a questo array di filtri incoerenti (si noti che 200,100 * * potrebbe essere espressa come solo 200,100 *...) con caratteri jolly indicati da s '*:
array(
'192.168.1.*',
'192.168.2.1*',
'10.0.0.*',
'200.100.*.*',
'300.200.*',
)
aggiornamento
Pensieri?
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;
}
}
è possibile specificare anche la maschera di rete di ciascun indirizzo IP? cioè: ''192.168.100.251/26'' o'' 192.168.100.251 '=>' 26'' (quella maschera a 26 bit potrebbe non essere nemmeno valida per l'indirizzo IP dato, è solo per un esempio) Se è possibile specificare maschere di rete, quindi il calcolo della validità dell'indirizzo IP è facile come 'if ($ first_addr_of_mask> $ ip && $ last_addr_of_mask <$ ip) ' – Oerd
Non lo farei in PHP ma piuttosto sul firewall del server. – hornetbzz