|
@@ -15,6 +15,11 @@ class IpUtils
|
|
|
*/
|
|
|
public function checkIp($clientIp, $ips = array())
|
|
|
{
|
|
|
+ // Se filtran las ips pasadas como parametros
|
|
|
+ $ips = array_filter($ips, function($ip) {
|
|
|
+ return IpUtils::isIp($ip);
|
|
|
+ });
|
|
|
+
|
|
|
// existe la variable de entorno API_CIDR ?
|
|
|
// ej. API_CIDR = 127.0.0.1, 127.0.0.1-127.0.0.10, 127.0.0.1/24
|
|
|
if (getenv("API_CIDR") !== false) {
|
|
@@ -23,11 +28,12 @@ class IpUtils
|
|
|
foreach ($pieces as $ip) {
|
|
|
if (strpos($ip, '-') !== false) {
|
|
|
$this->getIpRange($ip, $ips);
|
|
|
- } else {
|
|
|
+ } elseif (IpUtils::isIp($ip)) {
|
|
|
$ips[] = $ip;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
foreach ($ips as $ip) {
|
|
|
if (SfIpUtils::checkIp($clientIp, $ip)) {
|
|
|
return true;
|
|
@@ -36,7 +42,7 @@ class IpUtils
|
|
|
|
|
|
return false;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
/**
|
|
|
* @param string $ipRange
|
|
|
* @param array $ips
|
|
@@ -46,18 +52,33 @@ class IpUtils
|
|
|
public function getIpRange($ipRange, $ips = array())
|
|
|
{
|
|
|
$pieces = array_map('trim', explode('-', $ipRange));
|
|
|
- if (isset($pieces[0]) && isset($pieces[1])) {
|
|
|
+ if (isset($pieces[0]) && isset($pieces[1]) && IpUtils::isIp($pieces[0]) && IpUtils::isIp($pieces[1])) {
|
|
|
$firstIp = $ip = ip2long($pieces[0]);
|
|
|
$lastIp = ip2long($pieces[1]);
|
|
|
while ($ip <= $lastIp) {
|
|
|
$ips[] = long2ip($ip);
|
|
|
$ip++;
|
|
|
}
|
|
|
- } elseif (isset($pieces[0])) {
|
|
|
+ } elseif (isset($pieces[0]) && IpUtils::isIp($pieces[0])) {
|
|
|
$ips[] = $pieces[0];
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
return $ips;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * @param string $ip
|
|
|
+ *
|
|
|
+ * @return boolean
|
|
|
+ */
|
|
|
+ public function isIp($ip)
|
|
|
+ {
|
|
|
+ if (strpos($ip, '/') !== false) {
|
|
|
+ $pieces = explode('/', $ip);
|
|
|
+ $ip = $pieces[0];
|
|
|
+ }
|
|
|
+
|
|
|
+ return filter_var($ip, FILTER_VALIDATE_IP);
|
|
|
+ }
|
|
|
+
|
|
|
}
|