{
  "titel": "Security-Header: Versuchsreihe fuer den Guide https://www.cyberscale.io/security/security-header-und-seo/",
  "gemessen": "2026-09-17",
  "browser": {
    "version": "Chrome/152.0.7977.83",
    "steuerung": "puppeteer-core 23, Chrome ohne Oberflaeche, frisches Profil",
    "aufbau": "eigener Node-Server, Origins http://127.0.0.1:8101 (eigene Seite) und http://127.0.0.1:8102 (fremde Seite)",
    "laeufe": 2,
    "laeufe_identisch": true,
    "ergebnisse": [
      {
        "id": "F0",
        "frage": "Kontrolle: ohne Header, fremde Origin bettet ein",
        "aufbau": "kein Header",
        "beobachtet": "geladen"
      },
      {
        "id": "F1",
        "frage": "X-Frame-Options: DENY als Header",
        "aufbau": "Header",
        "beobachtet": "blockiert"
      },
      {
        "id": "F2",
        "frage": "X-Frame-Options: SAMEORIGIN, fremde Origin bettet ein",
        "aufbau": "Header",
        "beobachtet": "blockiert"
      },
      {
        "id": "F3",
        "frage": "X-Frame-Options: SAMEORIGIN, eigene Origin bettet ein",
        "aufbau": "Header",
        "beobachtet": "geladen"
      },
      {
        "id": "F4",
        "frage": "X-Frame-Options: DENY als <meta http-equiv>",
        "aufbau": "Meta",
        "beobachtet": "geladen"
      },
      {
        "id": "F5",
        "frage": "CSP frame-ancestors 'none' als Header",
        "aufbau": "Header",
        "beobachtet": "blockiert"
      },
      {
        "id": "F6",
        "frage": "CSP frame-ancestors 'none' als <meta http-equiv>",
        "aufbau": "Meta",
        "beobachtet": "geladen"
      },
      {
        "id": "F7",
        "frage": "Widerspruch: X-Frame-Options DENY + frame-ancestors erlaubt die fremde Origin",
        "aufbau": "Header",
        "beobachtet": "geladen"
      },
      {
        "id": "F8",
        "frage": "Widerspruch umgekehrt: X-Frame-Options fehlt nicht, frame-ancestors 'none' + XFO ALLOWALL",
        "aufbau": "Header",
        "beobachtet": "blockiert"
      },
      {
        "id": "F9",
        "frage": "X-Frame-Options: ALLOW-FROM http://127.0.0.1:8102, genau diese Origin bettet ein",
        "aufbau": "Header",
        "beobachtet": "geladen"
      },
      {
        "id": "F9b",
        "frage": "X-Frame-Options: ALLOW-FROM http://example.com, eine ANDERE Origin bettet ein",
        "aufbau": "Header",
        "beobachtet": "geladen"
      },
      {
        "id": "F10",
        "frage": "Report-Only mit frame-ancestors 'none'",
        "aufbau": "Header",
        "beobachtet": "geladen"
      },
      {
        "id": "N1",
        "frage": "Skript als text/plain, ohne nosniff",
        "aufbau": "Header",
        "beobachtet": "ausgeführt"
      },
      {
        "id": "N2",
        "frage": "Skript als text/plain, mit nosniff",
        "aufbau": "Header",
        "beobachtet": "blockiert"
      },
      {
        "id": "N3",
        "frage": "Skript als text/javascript, mit nosniff (Kontrolle)",
        "aufbau": "Header",
        "beobachtet": "ausgeführt"
      },
      {
        "id": "N4",
        "frage": "Stylesheet als text/plain, ohne nosniff",
        "aufbau": "Header",
        "beobachtet": "blockiert"
      },
      {
        "id": "N5",
        "frage": "Stylesheet als text/plain, mit nosniff",
        "aufbau": "Header",
        "beobachtet": "blockiert"
      },
      {
        "id": "N6",
        "frage": "Stylesheet als text/css, mit nosniff (Kontrolle)",
        "aufbau": "Header",
        "beobachtet": "angewendet"
      },
      {
        "id": "C0",
        "frage": "Kontrolle: Inline-Skript ohne CSP",
        "aufbau": "kein Header",
        "beobachtet": {
          "skript": "ausgeführt",
          "verletzungsmeldungen": 0
        }
      },
      {
        "id": "C1",
        "frage": "CSP script-src 'self' als Header",
        "aufbau": "Header",
        "beobachtet": {
          "skript": "blockiert",
          "verletzungsmeldungen": 0
        }
      },
      {
        "id": "C2",
        "frage": "Dieselbe Policy als Content-Security-Policy-Report-Only",
        "aufbau": "Header",
        "beobachtet": {
          "skript": "ausgeführt",
          "verletzungsmeldungen": 2
        }
      },
      {
        "id": "C3",
        "frage": "CSP script-src 'self' als <meta http-equiv>",
        "aufbau": "Meta",
        "beobachtet": {
          "skript": "blockiert",
          "verletzungsmeldungen": 0
        }
      },
      {
        "id": "C4",
        "frage": "Report-Only als <meta http-equiv>",
        "aufbau": "Meta",
        "beobachtet": {
          "skript": "ausgeführt",
          "verletzungsmeldungen": 0
        }
      },
      {
        "id": "C5",
        "frage": "Zwei CSP-Header: erster erlaubt 'unsafe-inline', zweiter nicht",
        "aufbau": "Header",
        "beobachtet": {
          "skript": "blockiert",
          "verletzungsmeldungen": 0
        }
      },
      {
        "id": "C6",
        "frage": "Ein Header, zwei Policies mit Komma verbunden (so fasst Netlify doppelte Werte zusammen)",
        "aufbau": "Header",
        "beobachtet": {
          "skript": "blockiert",
          "verletzungsmeldungen": 0
        }
      },
      {
        "id": "C7",
        "frage": "CSP-Header erlaubt 'unsafe-inline', <meta> verbietet es",
        "aufbau": "Header+Meta",
        "beobachtet": {
          "skript": "blockiert",
          "verletzungsmeldungen": 0
        }
      },
      {
        "id": "X1",
        "frage": "X-XSS-Protection: 1; mode=block, Skript steht in der URL und im Body (gespiegelt)",
        "aufbau": "Header",
        "beobachtet": "ausgeführt"
      },
      {
        "id": "R0",
        "frage": "Ohne Referrer-Policy: was sieht die fremde Origin?",
        "aufbau": "kein Header",
        "beobachtet": "http://127.0.0.1:8101/"
      },
      {
        "id": "R1",
        "frage": "Referrer-Policy: no-referrer als Header",
        "aufbau": "Header",
        "beobachtet": "kein Referer"
      },
      {
        "id": "R2",
        "frage": "<meta name=referrer content=no-referrer>",
        "aufbau": "Meta",
        "beobachtet": "kein Referer"
      },
      {
        "id": "R3",
        "frage": "Referrer-Policy: unsafe-url als Header",
        "aufbau": "Header",
        "beobachtet": "volle URL mit Parametern"
      },
      {
        "id": "P0",
        "frage": "Kontrolle: Geolocation ohne Permissions-Policy",
        "aufbau": "kein Header",
        "beobachtet": "erlaubt"
      },
      {
        "id": "P1",
        "frage": "Permissions-Policy: geolocation=() als Header",
        "aufbau": "Header",
        "beobachtet": "gesperrt"
      },
      {
        "id": "P2",
        "frage": "Permissions-Policy als <meta http-equiv>",
        "aufbau": "Meta",
        "beobachtet": "erlaubt"
      },
      {
        "id": "P3",
        "frage": "Tippfehler: geolocation=none (ohne Klammern) als Header",
        "aufbau": "Header",
        "beobachtet": "gesperrt"
      }
    ]
  },
  "nginx": {
    "version": "nginx/1.30.5 fuer Windows, von nginx.org, Signatur geprueft",
    "gezaehlte_header": [
      "Strict-Transport-Security",
      "X-Content-Type-Options",
      "X-Frame-Options",
      "Referrer-Policy",
      "Permissions-Policy",
      "Content-Security-Policy-Report-Only"
    ],
    "hinweis": "Variante G11/G12 zaehlt nur die zwei Header aus dem http-Block (X-Content-Type-Options, X-Frame-Options)",
    "ergebnisse": [
      {
        "id": "G1",
        "anfrage": "8201/",
        "frage": "ohne always: normale Seite",
        "status": 200,
        "security_header": 6,
        "cache_control": 0
      },
      {
        "id": "G2",
        "anfrage": "8201/gibtsnicht",
        "frage": "ohne always: 404-Seite",
        "status": 404,
        "security_header": 0,
        "cache_control": 0
      },
      {
        "id": "G3",
        "anfrage": "8201/umzug",
        "frage": "ohne always: 301-Weiterleitung",
        "status": 301,
        "security_header": 6,
        "cache_control": 0
      },
      {
        "id": "G4",
        "anfrage": "8201/kaputt",
        "frage": "ohne always: 500-Fehler",
        "status": 500,
        "security_header": 0,
        "cache_control": 0
      },
      {
        "id": "G5",
        "anfrage": "8202/",
        "frage": "mit always: normale Seite",
        "status": 200,
        "security_header": 6,
        "cache_control": 0
      },
      {
        "id": "G6",
        "anfrage": "8202/gibtsnicht",
        "frage": "mit always: 404-Seite",
        "status": 404,
        "security_header": 6,
        "cache_control": 0
      },
      {
        "id": "G7",
        "anfrage": "8202/kaputt",
        "frage": "mit always: 500-Fehler",
        "status": 500,
        "security_header": 6,
        "cache_control": 0
      },
      {
        "id": "G8",
        "anfrage": "8202/weiter/",
        "frage": "location ohne eigenes add_header",
        "status": 200,
        "security_header": 6,
        "cache_control": 0
      },
      {
        "id": "G9",
        "anfrage": "8202/downloads/a.txt",
        "frage": "location mit eigenem add_header Cache-Control",
        "status": 200,
        "security_header": 0,
        "cache_control": 1
      },
      {
        "id": "G10",
        "anfrage": "8202/downloads-merge/a.txt",
        "frage": "dasselbe mit add_header_inherit merge",
        "status": 200,
        "security_header": 6,
        "cache_control": 1
      },
      {
        "id": "G11",
        "anfrage": "8203/",
        "frage": "zwei Header im http-Block, server ohne add_header (von 2)",
        "status": 200,
        "security_header": 2,
        "cache_control": 0
      },
      {
        "id": "G12",
        "anfrage": "8204/",
        "frage": "zwei Header im http-Block, server setzt eigenen Header (von 2)",
        "status": 200,
        "security_header": 0,
        "cache_control": 0
      }
    ]
  }
}
