detectWafCdns function

List<String> detectWafCdns(
  1. Map<String, String>? headers,
  2. String? cname
)

Implementation

List<String> detectWafCdns(Map<String, String>? headers, String? cname) {
  final found = <String>{};
  try {
    if (headers != null) {
      final lower = <String, String>{};
      for (final e in headers.entries) {
        lower[e.key.toLowerCase()] = e.value.toLowerCase();
      }
      if (lower.containsKey('server') && lower['server']!.contains('vercel')) {
        found.add('Vercel');
      }
      if (lower.containsKey('x-vercel-id')) found.add('Vercel');
      if (lower.containsKey('server') &&
          lower['server']!.contains('cloudflare')) {
        found.add('Cloudflare');
      }
      if (lower.containsKey('cf-ray') || lower.containsKey('cf-cache-status')) {
        found.add('Cloudflare');
      }
      if (lower.containsKey('server') && lower['server']!.contains('akamai')) {
        found.add('Akamai');
      }
      if (lower.containsKey('via') && lower['via']!.contains('varnish')) {
        found.add('Varnish/CDN');
      }
      if (lower.containsKey('server') && lower['server']!.contains('fastly')) {
        found.add('Fastly');
      }
      if (lower.containsKey('x-amz-cf-id')) found.add('CloudFront');
      if (lower.containsKey('x-powered-by') &&
          lower['x-powered-by']!.contains('next')) {
        found.add('Next.js');
      }
    }
    if (cname != null && cname.isNotEmpty) {
      final cn = cname.toLowerCase();
      if (cn.endsWith('.vercel.app') || cn.contains('.now.sh')) {
        found.add('Vercel');
      }
      if (cn.endsWith('.cdn.cloudflare.net') || cn.contains('cloudflare')) {
        found.add('Cloudflare');
      }
      if (cn.contains('akamai') || cn.endsWith('.akamaized.net')) {
        found.add('Akamai');
      }
      if (cn.endsWith('.netlify.app') || cn.contains('netlify')) {
        found.add('Netlify');
      }
      if (cn.endsWith('.cloudfront.net')) found.add('CloudFront');
    }
  } catch (_) {}
  return found.toList();
}