誰もが、この入力かどうかを確認するために効果的かつ安全な方法を知っている:一貫性のないフィルタのこの配列に似た何かに対するPHPでIPアドレスとワイルドカードを比較する最適化された方法はありますか?
$_SERVER['REMOTE_ADDR']
が一致(200.100は* *だけ200.100のように表すことができること*注意してください。。。)
array(
'192.168.1.*',
'192.168.2.1*',
'10.0.0.*',
'200.100.*.*',
'300.200.*',
)
更新
思考:* 'sが示されたワイルドカードと?
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;
}
}
各IPアドレスのネットマスクも指定できますか? 「192.168.100.251/26」または「192.168.100」となります。251 '=>' 26 ''(26ビットマスクは与えられたIPアドレスでは有効でないかもしれませんが、それは単なる例のためです) ネットマスクを指定できれば、IPアドレスの妥当性を計算することは ' $ first_addr_of_mask> $ ip && $ last_addr_of_mask <$ ip) ' – Oerd
私はPHPではなくサーバのファイアウォールでこれを行います。 – hornetbzz