{
 "license": "CC BY 4.0",
 "license_url": "https://creativecommons.org/licenses/by/4.0/",
 "cite_as": "Webcracy.ch, Swiss Public-Sector Security Census, measured on 2026-10-25, https://census.webcracy.ch/, CC BY 4.0.",
 "date": "2026-10-25",
 "methodology": "2026-10-21",
 "commit": "1058fd0aab06564c1d6f3a911812ae228334260f",
 "measured": 2210,
 "coverage": {
  "listed": 2210,
  "opted_out": 0,
  "no_domain": 4,
  "incomplete": 23
 },
 "mean_score": 0.6237933634992459,
 "median_score": 8,
 "full_marks": 0.020361990950226245,
 "baseline": 0.1497737556561086,
 "index": {
  "median": 55.8,
  "mean": 55.40821980018165,
  "scored": 2202,
  "excluded": 8,
  "buckets": [
   4,
   24,
   89,
   263,
   468,
   466,
   438,
   340,
   81,
   29
  ],
  "categories": {
   "mail": 0.6586649917760391,
   "transport": 0.10535876475930972,
   "web": 0.7705267938237965,
   "hardening": 0.43573858719489783,
   "dns": 0.3393732970027248
  },
  "weights": {
   "mail": 30,
   "transport": 10,
   "web": 30,
   "hardening": 15,
   "dns": 15
  },
  "components": [
   {
    "id": "dmarc",
    "category": "mail",
    "weight": 16
   },
   {
    "id": "spf",
    "category": "mail",
    "weight": 8
   },
   {
    "id": "dmarc_rua",
    "category": "mail",
    "weight": 3
   },
   {
    "id": "web_mail_protected",
    "category": "mail",
    "weight": 3
   },
   {
    "id": "encrypted_delivery",
    "category": "transport",
    "weight": 8
   },
   {
    "id": "tls_rpt",
    "category": "transport",
    "weight": 2
   },
   {
    "id": "tls",
    "category": "web",
    "weight": 15
   },
   {
    "id": "hsts",
    "category": "web",
    "weight": 12
   },
   {
    "id": "cert_fresh",
    "category": "web",
    "weight": 3
   },
   {
    "id": "header_csp",
    "category": "hardening",
    "weight": 5
   },
   {
    "id": "header_xfo",
    "category": "hardening",
    "weight": 3
   },
   {
    "id": "header_xcto",
    "category": "hardening",
    "weight": 3
   },
   {
    "id": "header_referrer",
    "category": "hardening",
    "weight": 2
   },
   {
    "id": "cookies",
    "category": "hardening",
    "weight": 2
   },
   {
    "id": "dnssec",
    "category": "dns",
    "weight": 8
   },
   {
    "id": "caa",
    "category": "dns",
    "weight": 2
   },
   {
    "id": "security_txt",
    "category": "dns",
    "weight": 5
   }
  ]
 },
 "counts": {
  "security_txt": {
   "pass": 998,
   "partial": 15,
   "fail": 1178,
   "error": 19
  },
  "spf": {
   "pass": 2076,
   "partial": 95,
   "fail": 34,
   "error": 5
  },
  "dmarc": {
   "pass": 1001,
   "partial": 472,
   "fail": 735,
   "error": 2
  },
  "dnssec": {
   "pass": 730,
   "partial": 0,
   "fail": 1476,
   "error": 4
  },
  "hsts": {
   "pass": 650,
   "partial": 837,
   "fail": 715,
   "error": 8
  },
  "tls": {
   "pass": 2107,
   "partial": 0,
   "fail": 95,
   "error": 8
  }
 },
 "extras": {
  "caa": {
   "yes": 168,
   "no": 2038,
   "unknown": 0
  },
  "mta_sts": {
   "yes": 20,
   "no": 2188,
   "unknown": 0
  },
  "tls_rpt": {
   "yes": 24,
   "no": 2184,
   "unknown": 0
  },
  "dmarc_rua": {
   "yes": 858,
   "no": 1350,
   "unknown": 0
  },
  "cert_expiring_14d": {
   "yes": 10,
   "no": 2154,
   "unknown": 42
  },
  "php2shell_patched": {
   "yes": 44,
   "no": 19,
   "unknown": 2100
  },
  "header_csp": {
   "yes": 363,
   "no": 1800,
   "unknown": 0
  },
  "header_xfo": {
   "yes": 1333,
   "no": 830,
   "unknown": 0
  },
  "header_xcto": {
   "yes": 1486,
   "no": 677,
   "unknown": 0
  },
  "header_referrer": {
   "yes": 689,
   "no": 1474,
   "unknown": 0
  },
  "cookies_secure": {
   "yes": 996,
   "no": 347,
   "unknown": 820
  },
  "cookies_httponly": {
   "yes": 1046,
   "no": 297,
   "unknown": 820
  },
  "cookies_samesite": {
   "yes": 898,
   "no": 445,
   "unknown": 820
  },
  "tracker_analytics": {
   "yes": 311,
   "no": 1834,
   "unknown": 18
  },
  "tracker_fonts": {
   "yes": 477,
   "no": 1668,
   "unknown": 18
  },
  "tracker_video": {
   "yes": 131,
   "no": 2014,
   "unknown": 18
  },
  "tracker_meta": {
   "yes": 214,
   "no": 1931,
   "unknown": 18
  },
  "tracker_session_replay": {
   "yes": 0,
   "no": 2145,
   "unknown": 18
  },
  "web_mail_protected": {
   "yes": 9,
   "no": 61,
   "unknown": 0
  },
  "dane_mx": {
   "yes": 277,
   "no": 1910,
   "unknown": 21
  },
  "m365_dkim_selector": {
   "yes": 693,
   "no": 315,
   "unknown": null
  },
  "ipv6_web": {
   "yes": 433,
   "no": 1773,
   "unknown": 0
  },
  "ipv6_mail": {
   "yes": 1334,
   "no": 873,
   "unknown": null
  }
 },
 "infrastructure": {
  "distinct_ips": 1667,
  "roles": {
   "web": {
    "distinct_ips": 1213,
    "ports": {
     "21": {
      "open_share": 0.96,
      "unknown_share": 0.49
     },
     "22": {
      "open_share": 0.96,
      "unknown_share": 0.63
     },
     "23": {
      "open_share": 0.04,
      "unknown_share": 0.91
     },
     "25": {
      "open_share": 0.72,
      "unknown_share": 0.75
     },
     "80": {
      "open_share": null,
      "unknown_share": 0.3
     },
     "443": {
      "open_share": null,
      "unknown_share": 0.3
     },
     "445": {
      "open_share": 0.05,
      "unknown_share": 0.91
     },
     "1433": {
      "open_share": 0.05,
      "unknown_share": 0.91
     },
     "3306": {
      "open_share": 0.68,
      "unknown_share": 0.75
     },
     "3389": {
      "open_share": 0.05,
      "unknown_share": 0.91
     },
     "5432": {
      "open_share": 0.1,
      "unknown_share": 0.88
     },
     "5900": {
      "open_share": 0.04,
      "unknown_share": 0.91
     },
     "6379": {
      "open_share": 0.04,
      "unknown_share": 0.91
     },
     "8080": {
      "open_share": 0.29,
      "unknown_share": 0.87
     },
     "8443": {
      "open_share": 0.6,
      "unknown_share": 0.79
     },
     "9200": {
      "open_share": 0.04,
      "unknown_share": 0.91
     },
     "27017": {
      "open_share": 0.04,
      "unknown_share": 0.91
     }
    },
    "country_ch": {
     "open_share": 0.81,
     "unknown_share": null
    },
    "top_asns": [
     {
      "asn": "29222",
      "ips": 402
     },
     {
      "asn": "47302",
      "ips": 104
     },
     {
      "asn": "21069",
      "ips": 82
     },
     {
      "asn": "29097",
      "ips": 82
     },
     {
      "asn": "13335",
      "ips": 70
     },
     {
      "asn": "3303",
      "ips": 50
     },
     {
      "asn": "16509",
      "ips": 44
     },
     {
      "asn": "51423",
      "ips": 38
     }
    ],
    "services_seen": {
     "http": 840,
     "https": 833,
     "port_database_or_search": 209,
     "port_ftp": 591,
     "port_rdp": 5,
     "port_smb": 5,
     "port_ssh": 424,
     "port_telnet": 5,
     "port_vnc": 4,
     "smtp_starttls_invalid_cert": 126,
     "smtp_starttls_valid": 67,
     "smtp_unknown": 25,
     "unknown": 67
    }
   },
   "mail": {
    "distinct_ips": 496,
    "ports": {
     "21": {
      "open_share": 0.74,
      "unknown_share": 0.84
     },
     "22": {
      "open_share": 0.63,
      "unknown_share": 0.91
     },
     "23": {
      "open_share": null,
      "unknown_share": 0.95
     },
     "25": {
      "open_share": null,
      "unknown_share": 0.21
     },
     "80": {
      "open_share": 0.82,
      "unknown_share": 0.7
     },
     "443": {
      "open_share": 0.91,
      "unknown_share": 0.59
     },
     "445": {
      "open_share": null,
      "unknown_share": 0.95
     },
     "1433": {
      "open_share": null,
      "unknown_share": 0.94
     },
     "3306": {
      "open_share": 0.67,
      "unknown_share": 0.84
     },
     "3389": {
      "open_share": null,
      "unknown_share": 0.94
     },
     "5432": {
      "open_share": 0.08,
      "unknown_share": 0.93
     },
     "5900": {
      "open_share": null,
      "unknown_share": 0.94
     },
     "6379": {
      "open_share": null,
      "unknown_share": 0.94
     },
     "8080": {
      "open_share": 0.09,
      "unknown_share": 0.93
     },
     "8443": {
      "open_share": 0.64,
      "unknown_share": 0.85
     },
     "9200": {
      "open_share": null,
      "unknown_share": 0.94
     },
     "27017": {
      "open_share": null,
      "unknown_share": 0.94
     }
    },
    "country_ch": {
     "open_share": 0.67,
     "unknown_share": null
    },
    "top_asns": [
     {
      "asn": "8075",
      "ips": 77
     },
     {
      "asn": "3303",
      "ips": 37
     },
     {
      "asn": "21069",
      "ips": 31
     },
     {
      "asn": "33965",
      "ips": 25
     }
    ],
    "services_seen": {
     "http": 118,
     "https": 171,
     "port_database_or_search": 54,
     "port_ftp": 60,
     "port_ssh": 27,
     "smtp_starttls_invalid_cert": 99,
     "smtp_starttls_valid": 257,
     "smtp_unknown": 32,
     "unknown": 27
    },
    "starttls_valid": {
     "open_share": 0.66,
     "unknown_share": 0.21
    }
   }
  },
  "ports_scanned": [
   21,
   22,
   23,
   25,
   80,
   443,
   445,
   1433,
   3306,
   3389,
   5432,
   5900,
   6379,
   8080,
   8443,
   9200,
   27017
  ],
  "nameserver_single_asn": {
   "open_share": 0.62,
   "unknown_share": 0
  }
 },
 "statistics": {
  "scores": [
   6,
   2,
   25,
   16,
   159,
   169,
   340,
   300,
   419,
   412,
   265,
   52,
   45
  ],
  "problems": {
   "dnssec_unsigned": 1473,
   "security_txt_missing": 1178,
   "hsts_short": 837,
   "dmarc_missing": 727,
   "hsts_missing": 595,
   "dmarc_none": 461,
   "http_no_redirect": 59,
   "tls_legacy": 57,
   "spf_neutral": 55,
   "tls_certificate": 35,
   "spf_missing": 33,
   "spf_include_missing": 19,
   "spf_too_many": 15,
   "dmarc_pct": 11,
   "security_txt_expired": 11,
   "spf_no_all": 6,
   "dmarc_invalid": 5,
   "dnssec_broken": 3,
   "dmarc_multiple": 3,
   "spf_multiple": 1
  },
  "groups": {
   "municipality": {
    "n": 2110,
    "pass": {
     "security_txt": 0.43,
     "spf": null,
     "dmarc": null,
     "dnssec": null,
     "hsts": 0.3,
     "tls": null
    }
   },
   "canton": {
    "n": 26,
    "pass": {
     "security_txt": 0.65,
     "spf": null,
     "dmarc": null,
     "dnssec": null,
     "hsts": 0.54,
     "tls": null
    }
   },
   "federal": {
    "n": 74,
    "pass": {
     "security_txt": 0.89,
     "spf": null,
     "dmarc": null,
     "dnssec": null,
     "hsts": 0.05,
     "tls": null
    }
   }
  },
  "providers": [
   {
    "name": "Microsoft 365",
    "n": 1009,
    "pass": {
     "security_txt": 0.4,
     "spf": 0.98,
     "dmarc": 0.51,
     "dnssec": 0.38,
     "hsts": 0.29,
     "tls": 0.95
    }
   },
   {
    "name": "Infomaniak",
    "n": 110,
    "pass": {
     "security_txt": 0.1,
     "spf": 0.62,
     "dmarc": 0.55,
     "dnssec": 0.83,
     "hsts": 0.1,
     "tls": 0.94
    }
   },
   {
    "name": "Abraxas",
    "n": 97,
    "pass": {
     "security_txt": 0.78,
     "spf": 0.97,
     "dmarc": 0.26,
     "dnssec": 0.08,
     "hsts": 0.3,
     "tls": null
    }
   },
   {
    "name": "SEPPmail",
    "n": 32,
    "pass": {
     "security_txt": 0.75,
     "spf": null,
     "dmarc": 0.44,
     "dnssec": 0.34,
     "hsts": 0.5,
     "tls": null
    }
   }
  ],
  "cantons": [
   {
    "canton": "AG",
    "name": "Aargau",
    "n": 197,
    "pass": {
     "security_txt": 0.67,
     "spf": 0.97,
     "dmarc": 0.65,
     "dnssec": 0.21,
     "hsts": 0.52,
     "tls": 0.98
    },
    "baseline": 0.36,
    "index": 66
   },
   {
    "canton": "AR",
    "name": "Appenzell Ausserrhoden",
    "n": 21,
    "pass": {
     "security_txt": 0.76,
     "spf": 0.81,
     "dmarc": 0.48,
     "dnssec": 0.24,
     "hsts": 0.33,
     "tls": null
    },
    "baseline": 0.19,
    "index": 71
   },
   {
    "canton": "BE",
    "name": "Bern / Berne",
    "n": 335,
    "pass": {
     "security_txt": 0.4,
     "spf": 0.95,
     "dmarc": 0.6,
     "dnssec": 0.37,
     "hsts": 0.39,
     "tls": 0.96
    },
    "baseline": 0.26,
    "index": 58
   },
   {
    "canton": "BL",
    "name": "Basel-Landschaft",
    "n": 87,
    "pass": {
     "security_txt": 0.41,
     "spf": 0.94,
     "dmarc": 0.66,
     "dnssec": 0.31,
     "hsts": 0.52,
     "tls": 0.87
    },
    "baseline": 0.39,
    "index": 65
   },
   {
    "canton": "FR",
    "name": "Fribourg / Freiburg",
    "n": 120,
    "pass": {
     "security_txt": 0.23,
     "spf": 0.94,
     "dmarc": 0.37,
     "dnssec": 0.39,
     "hsts": 0.12,
     "tls": 0.94
    },
    "baseline": null,
    "index": 47
   },
   {
    "canton": "GE",
    "name": "Genève",
    "n": 46,
    "pass": {
     "security_txt": 0.46,
     "spf": null,
     "dmarc": null,
     "dnssec": 0.09,
     "hsts": 0.15,
     "tls": null
    },
    "baseline": null,
    "index": 46
   },
   {
    "canton": "GR",
    "name": "Graubünden / Grigioni / Grischun",
    "n": 101,
    "pass": {
     "security_txt": 0.26,
     "spf": 0.96,
     "dmarc": 0.23,
     "dnssec": 0.3,
     "hsts": 0.14,
     "tls": 0.93
    },
    "baseline": 0.03,
    "index": 44
   },
   {
    "canton": "JU",
    "name": "Jura",
    "n": 52,
    "pass": {
     "security_txt": 0.08,
     "spf": 0.85,
     "dmarc": 0.54,
     "dnssec": 0.75,
     "hsts": 0.42,
     "tls": 0.9
    },
    "baseline": 0.17,
    "index": 62
   },
   {
    "canton": "LU",
    "name": "Luzern",
    "n": 80,
    "pass": {
     "security_txt": 0.66,
     "spf": null,
     "dmarc": 0.7,
     "dnssec": 0.12,
     "hsts": 0.42,
     "tls": null
    },
    "baseline": 0.3,
    "index": 63
   },
   {
    "canton": "NE",
    "name": "Neuchâtel",
    "n": 25,
    "pass": {
     "security_txt": null,
     "spf": null,
     "dmarc": null,
     "dnssec": null,
     "hsts": null,
     "tls": null
    },
    "baseline": null,
    "index": 37
   },
   {
    "canton": "SG",
    "name": "St. Gallen",
    "n": 76,
    "pass": {
     "security_txt": 0.76,
     "spf": null,
     "dmarc": 0.37,
     "dnssec": 0.14,
     "hsts": 0.18,
     "tls": null
    },
    "baseline": 0.04,
    "index": 61
   },
   {
    "canton": "SH",
    "name": "Schaffhausen",
    "n": 27,
    "pass": {
     "security_txt": 0.26,
     "spf": null,
     "dmarc": null,
     "dnssec": 0.63,
     "hsts": 0.22,
     "tls": null
    },
    "baseline": null,
    "index": 36
   },
   {
    "canton": "SO",
    "name": "Solothurn",
    "n": 105,
    "pass": {
     "security_txt": 0.64,
     "spf": 0.95,
     "dmarc": 0.38,
     "dnssec": 0.28,
     "hsts": 0.37,
     "tls": null
    },
    "baseline": 0.15,
    "index": 55
   },
   {
    "canton": "SZ",
    "name": "Schwyz",
    "n": 31,
    "pass": {
     "security_txt": 0.68,
     "spf": null,
     "dmarc": 0.71,
     "dnssec": 0.16,
     "hsts": 0.35,
     "tls": null
    },
    "baseline": 0.19,
    "index": 58
   },
   {
    "canton": "TG",
    "name": "Thurgau",
    "n": 81,
    "pass": {
     "security_txt": 0.75,
     "spf": 0.91,
     "dmarc": 0.16,
     "dnssec": 0.09,
     "hsts": 0.58,
     "tls": null
    },
    "baseline": 0.12,
    "index": 58
   },
   {
    "canton": "TI",
    "name": "Ticino",
    "n": 101,
    "pass": {
     "security_txt": null,
     "spf": 0.94,
     "dmarc": 0.16,
     "dnssec": 0.19,
     "hsts": 0.11,
     "tls": 0.97
    },
    "baseline": 0.04,
    "index": 42
   },
   {
    "canton": "UR",
    "name": "Uri",
    "n": 20,
    "pass": {
     "security_txt": 0.25,
     "spf": null,
     "dmarc": 0.2,
     "dnssec": null,
     "hsts": null,
     "tls": null
    },
    "baseline": null,
    "index": 42
   },
   {
    "canton": "VD",
    "name": "Vaud",
    "n": 301,
    "pass": {
     "security_txt": 0.22,
     "spf": 0.88,
     "dmarc": 0.59,
     "dnssec": 0.65,
     "hsts": 0.17,
     "tls": 0.91
    },
    "baseline": 0.1,
    "index": 57
   },
   {
    "canton": "VS",
    "name": "Valais / Wallis",
    "n": 123,
    "pass": {
     "security_txt": 0.2,
     "spf": 0.89,
     "dmarc": 0.33,
     "dnssec": 0.65,
     "hsts": 0.18,
     "tls": 0.91
    },
    "baseline": 0.04,
    "index": 50
   },
   {
    "canton": "ZH",
    "name": "Zürich",
    "n": 161,
    "pass": {
     "security_txt": 0.86,
     "spf": 0.96,
     "dmarc": 0.13,
     "dnssec": 0.11,
     "hsts": 0.33,
     "tls": 0.98
    },
    "baseline": 0.06,
    "index": 58
   },
   {
    "canton": "other",
    "members": [
     "AI",
     "BS",
     "GL",
     "NW",
     "OW",
     "ZG"
    ],
    "n": 46,
    "pass": {
     "security_txt": 0.74,
     "spf": null,
     "dmarc": 0.3,
     "dnssec": 0.2,
     "hsts": 0.37,
     "tls": 0.93
    },
    "baseline": 0.17,
    "index": 53
   }
  ]
 },
 "changes": {
  "since": "2026-10-24",
  "compared": 2210,
  "checks": {
   "security_txt": {
    "better": 0,
    "worse": 17
   },
   "spf": {
    "better": 0,
    "worse": 0
   },
   "dmarc": {
    "better": 0,
    "worse": 0
   },
   "dnssec": {
    "better": 0,
    "worse": 0
   },
   "hsts": {
    "better": 0,
    "worse": 1
   },
   "tls": {
    "better": 15,
    "worse": 0
   }
  },
  "score": {
   "better": 0,
   "worse": 3
  },
  "baseline": {
   "compared": 2198,
   "before": 0.15059144676979072,
   "now": 0.15059144676979072
  },
  "index": {
   "compared": 2199,
   "mean": 0.022373806275579763,
   "better": 34,
   "worse": 35
  }
 },
 "trend": [
  {
   "date": "2026-10-18",
   "pass": {
    "security_txt": 0.4458955223880597,
    "spf": 0.9379664179104478,
    "dmarc": 0.43283582089552236,
    "dnssec": 0.33908582089552236,
    "hsts": 0.30177238805970147,
    "tls": 0.9449626865671642
   },
   "baseline": 0.1515858208955224,
   "index": null
  },
  {
   "date": "2026-10-19",
   "pass": {
    "security_txt": 0.4588235294117647,
    "spf": 0.9398190045248869,
    "dmarc": 0.4493212669683258,
    "dnssec": 0.32986425339366515,
    "hsts": 0.29547511312217195,
    "tls": 0.9466063348416289
   },
   "baseline": 0.14886877828054298,
   "index": null
  },
  {
   "date": "2026-10-20",
   "pass": {
    "security_txt": 0.4588235294117647,
    "spf": 0.9398190045248869,
    "dmarc": 0.4493212669683258,
    "dnssec": 0.32986425339366515,
    "hsts": 0.29502262443438915,
    "tls": 0.9466063348416289
   },
   "baseline": 0.14886877828054298,
   "index": null
  },
  {
   "date": "2026-10-21",
   "pass": {
    "security_txt": 0.41900452488687784,
    "spf": 0.9402714932126697,
    "dmarc": 0.4515837104072398,
    "dnssec": 0.33031674208144796,
    "hsts": 0.2407239819004525,
    "tls": 0.8574660633484162
   },
   "baseline": 0.11176470588235295,
   "index": 55.1
  },
  {
   "date": "2026-10-22",
   "pass": {
    "security_txt": 0.4588235294117647,
    "spf": 0.9398190045248869,
    "dmarc": 0.45203619909502263,
    "dnssec": 0.33031674208144796,
    "hsts": 0.29411764705882354,
    "tls": 0.9452488687782805
   },
   "baseline": 0.1493212669683258,
   "index": 55.8
  },
  {
   "date": "2026-10-23",
   "pass": {
    "security_txt": 0.4592760180995475,
    "spf": 0.9398190045248869,
    "dmarc": 0.45248868778280543,
    "dnssec": 0.33031674208144796,
    "hsts": 0.29366515837104074,
    "tls": 0.9384615384615385
   },
   "baseline": 0.1493212669683258,
   "index": 55.8
  },
  {
   "date": "2026-10-24",
   "pass": {
    "security_txt": 0.4592760180995475,
    "spf": 0.9393665158371041,
    "dmarc": 0.45294117647058824,
    "dnssec": 0.33031674208144796,
    "hsts": 0.29457013574660634,
    "tls": 0.9466063348416289
   },
   "baseline": 0.1497737556561086,
   "index": 55.8
  },
  {
   "date": "2026-10-25",
   "pass": {
    "security_txt": 0.4515837104072398,
    "spf": 0.9393665158371041,
    "dmarc": 0.45294117647058824,
    "dnssec": 0.33031674208144796,
    "hsts": 0.29411764705882354,
    "tls": 0.9533936651583711
   },
   "baseline": 0.1497737556561086,
   "index": 55.8
  }
 ]
}
