Guillermo Espinoza 7 gadi atpakaļ
vecāks
revīzija
cb422052e6
1 mainītis faili ar 26 papildinājumiem un 5 dzēšanām
  1. 26 5
      Utils/IpUtils.php

+ 26 - 5
Utils/IpUtils.php

@@ -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);
+    }
+
 }