任何人都知道一种有效且安全的方法来查看此输入是否:
$_SERVER['REMOTE_ADDR']
与类似于此不一致过滤器数组的内容匹配(请注意,200.100.*.* 可以仅表示为 200.100.*),并使用 * 表示的通配符:
array(
'192.168.1.*',
'192.168.2.1*',
'10.0.0.*',
'200.100.*.*',
'300.200.*',
)
Update
想法?
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;
}
}
我还没有对此进行基准测试,但我会选择使用网络硬件/软件使用的方法......
将任意 * 替换为 0 和 255。
将 IP 转换为整数
因此,如果 255.255.255.* 变为 255.255.255.0 和 255.255.255.255
然后在这两个ip上执行ip2long函数。
然后你可以将给定的ip转换成长ip。例如 255.255.50.51 为长 ip。
然后你可以比较这个给定ip的长ip是否在黑名单中转换后的长ip之间。如果是则不允许,否则不允许。
$ips = array("ip1", "ip2");
foreach($ips as $ip){
$ip1 = str_replace("*", "0", $ip);
$ip2 = str_replace("*", "255", $ip);
$ip1 = ip2long($ip1);
$ip2 = ip2long($ip2);
$givenip = $_GET["ip"];
$givenip = ip2long($givenip);
if($givenip >= $ip1 && $ip <= $givenip){
echo "blacklist ip hit between {$ip1} and {$ip2} on {$ip}";
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)