= self::DNS_LOOKUPS_PER_MINUTE) { return false; } set_transient($key, $spent + 1, 2 * MINUTE_IN_SECONDS); return true; } private static function reverse_dns_verify($ip) { $host = @gethostbyaddr($ip); if (!$host || $host === $ip) { return false; } $host = strtolower(rtrim($host, '.')); $recognised = false; foreach (self::VERIFIED_DOMAINS as $domain) { if (substr($host, -strlen($domain)) === $domain) { $recognised = true; break; } } if (!$recognised) { return false; } if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) { $records = @dns_get_record($host, DNS_AAAA); foreach ((array) $records as $record) { if (!empty($record['ipv6']) && inet_pton($record['ipv6']) === inet_pton($ip)) { return true; } } return false; } $forward = @gethostbynamel($host); return is_array($forward) && in_array($ip, $forward, true); } }