예제 #1
0
 protected static function rewrite()
 {
     // only should be run once per page load
     if (self::$is_cf !== NULL) {
         return;
     }
     // Set this based on the presence of the header, so it is true even if IP has already been rewritten
     self::$is_cf = isset($_SERVER["HTTP_CF_CONNECTING_IP"]) ? TRUE : FALSE;
     // Store original remote address in $original_ip
     self::$original_ip = isset($_SERVER["REMOTE_ADDR"]) ? $_SERVER["REMOTE_ADDR"] : FALSE;
     // Process original_ip if on cloudflare
     if (self::$is_cf && self::$original_ip) {
         // Check for IPv4 v. IPv6
         if (strpos(self::$original_ip, ":") === FALSE) {
             foreach (self::$cf_ipv4 as $range) {
                 if (IpRange::ipv4_in_range(self::$original_ip, $range)) {
                     if (self::$is_cf) {
                         self::$rewritten_ip = $_SERVER["REMOTE_ADDR"] = $_SERVER["HTTP_CF_CONNECTING_IP"];
                     }
                     break;
                 }
             }
         } else {
             $ipv6 = IpRange::get_ipv6_full(self::$original_ip);
             foreach (self::$cf_ipv6 as $range) {
                 if (IpRange::ipv6_in_range($ipv6, $range)) {
                     if (self::$is_cf) {
                         self::$rewritten_ip = $_SERVER["REMOTE_ADDR"] = $_SERVER["HTTP_CF_CONNECTING_IP"];
                     }
                     break;
                 }
             }
         }
     }
 }