never match invalid IP addresses
This commit is contained in:
parent
79c1f5e4ad
commit
8ad32f0ef5
|
@ -87,6 +87,10 @@ class IpUtils
|
||||||
$netmask = 32;
|
$netmask = 32;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (false === ip2long($address)) {
|
||||||
|
return self::$checkedIps[$cacheKey] = false;
|
||||||
|
}
|
||||||
|
|
||||||
return self::$checkedIps[$cacheKey] = 0 === substr_compare(sprintf('%032b', ip2long($requestIp)), sprintf('%032b', ip2long($address)), 0, $netmask);
|
return self::$checkedIps[$cacheKey] = 0 === substr_compare(sprintf('%032b', ip2long($requestIp)), sprintf('%032b', ip2long($address)), 0, $netmask);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -82,4 +82,21 @@ class IpUtilsTest extends TestCase
|
||||||
|
|
||||||
IpUtils::checkIp('2a01:198:603:0:396e:4789:8e99:890f', '2a01:198:603:0::/65');
|
IpUtils::checkIp('2a01:198:603:0:396e:4789:8e99:890f', '2a01:198:603:0::/65');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dataProvider invalidIpAddressData
|
||||||
|
*/
|
||||||
|
public function testInvalidIpAddressesDoNotMatch($requestIp, $proxyIp)
|
||||||
|
{
|
||||||
|
$this->assertFalse(IpUtils::checkIp4($requestIp, $proxyIp));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function invalidIpAddressData()
|
||||||
|
{
|
||||||
|
return array(
|
||||||
|
'invalid proxy wildcard' => array('192.168.20.13', '*'),
|
||||||
|
'invalid proxy missing netmask' => array('192.168.20.13', '0.0.0.0'),
|
||||||
|
'invalid request IP with invalid proxy wildcard' => array('0.0.0.0', '*'),
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Reference in New Issue