{"id":13427,"date":"2026-08-31T15:31:17","date_gmt":"2026-08-31T13:31:17","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/werkzeuge\/http-security-header-checker\/"},"modified":"2026-08-31T15:31:17","modified_gmt":"2026-08-31T13:31:17","slug":"http-security-header-checker","status":"publish","type":"page","link":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/http-security-header-checker\/","title":{"rendered":"Pr\u00fcfer f\u00fcr HTTP-Sicherheitskopfzeilen"},"content":{"rendered":"<div class=\"gtm-analyser-container\" style=\"background: var(--bg-panel, #1e1e24); padding: 25px; border-radius: 8px; border: 1px solid var(--border, #2a2a35);\">\n<p style=\"color: var(--text-secondary, #a0a0b0); margin-bottom: 20px;\">Sicherheitskopfzeilen sind leicht zu setzen und leicht nutzlos zu setzen. Eine Content-Security-Policy, die unsafe-inline erlaubt, ist vorhanden und richtet gegen den Angriff, f\u00fcr den sie da ist, nichts aus. Hier wird gelesen, was eine Adresse wirklich zur\u00fcckschickt, und die Wirkung beurteilt, nicht das Dasein.<\/p>\n<div style=\"margin-bottom: 14px;\">\n        <label for=\"hc-url\" style=\"color: var(--text-secondary, #a0a0b0); display: block; font-size: 0.85rem; margin-bottom: 5px;\">Adresse<\/label><br \/>\n        <input id=\"hc-url\" type=\"text\" value=\"https:\/\/example.com\/\" class=\"form-control\" style=\"width: 100%; padding: 10px; background: var(--bg-body, #14141a); border: 1px solid var(--border, #2a2a35); color: var(--text-primary, #e8e8ee); border-radius: 6px; box-sizing: border-box; font-family: monospace;\">\n    <\/div>\n<p style=\"color: var(--text-secondary, #a0a0b0); font-size: 0.82rem; margin-bottom: 16px;\">Die Adresse wird einmal von diesem Server abgerufen, mit einem schlichten GET und ohne Cookies. Anfragen in private Netze, an Loopback- und Link-local-Adressen werden abgelehnt, auch \u00fcber Weiterleitungen. Die Abfrage ist \u00fcber reCAPTCHA v3 gesch\u00fctzt; die aufrufende IP-Adresse und das Ziel werden eine Stunde lang gespeichert, um die H\u00e4ufigkeit zu begrenzen.<\/p>\n<p>    <button id=\"hc-btn\" class=\"button\" style=\"background: var(--accent, #7ee787); color: var(--on-accent, #0b1114); border: none; padding: 12px 24px; border-radius: 6px; font-weight: 700; cursor: pointer;\">Kopfzeilen pr\u00fcfen<\/button><\/p>\n<div id=\"hc-ausgabe\" style=\"margin-top: 22px;\"><\/div>\n<\/div>\n<p><script>\n(function () {\n    'use strict';<\/p>\n<p>    const T = {\"einleitung\":\"Sicherheitskopfzeilen sind leicht zu setzen und leicht nutzlos zu setzen. Eine Content-Security-Policy, die unsafe-inline erlaubt, ist vorhanden und richtet gegen den Angriff, f\u00fcr den sie da ist, nichts aus. Hier wird gelesen, was eine Adresse wirklich zur\u00fcckschickt, und die Wirkung beurteilt, nicht das Dasein.\",\"label_url\":\"Adresse\",\"datenschutz\":\"Die Adresse wird einmal von diesem Server abgerufen, mit einem schlichten GET und ohne Cookies. Anfragen in private Netze, an Loopback- und Link-local-Adressen werden abgelehnt, auch \u00fcber Weiterleitungen. Die Abfrage ist \u00fcber reCAPTCHA v3 gesch\u00fctzt; die aufrufende IP-Adresse und das Ziel werden eine Stunde lang gespeichert, um die H\u00e4ufigkeit zu begrenzen.\",\"knopf\":\"Kopfzeilen pr\u00fcfen\",\"laeuft\":\"Die Kopfzeilen werden geholt...\",\"h_uebersicht\":\"\u00dcberblick\",\"zeile_endziel\":\"Gelandet bei\",\"zeile_status\":\"Status\",\"zeile_spruenge\":\"Weiterleitungen\",\"zeile_rahmen\":\"Rahmenschutz\",\"zeile_dauer\":\"Dauer\",\"ampel_gut\":\"wirksam\",\"ampel_teilweise\":\"vorhanden, abgeschw\u00e4cht\",\"ampel_fehlt\":\"fehlt\",\"urteil_geschlossen\":\"Alle vier haben Gewicht.\",\"urteil_halb\":\"Einiges ist gesetzt, und mindestens eines davon tut nicht, wonach es aussieht.\",\"urteil_offen\":\"Keine der vier ist wirksam.\",\"h_csp\":\"Content-Security-Policy\",\"csp_keine\":\"Keine Richtlinie. Jedes Skript, das die Seite l\u00e4dt, l\u00e4uft, woher es auch stammt.\",\"csp_nur_bericht_hinweis\":\"Diese Richtlinie ist nur im Berichtsmodus gesetzt. Sie meldet Verst\u00f6\u00dfe und verhindert nichts.\",\"h_hsts\":\"Strict-Transport-Security\",\"hsts_keine\":\"Kein HSTS. Die erste Anfrage \u00fcber http erreicht den Server, bevor eine Weiterleitung helfen kann.\",\"zeile_maxage\":\"max-age\",\"einheit_sekunden\":\"Sekunden\",\"einheit_tage\":\"Tage\",\"h_kopfzeilen\":\"Die Kopfzeilen, wie sie kommen\",\"kopfzeilen_keine\":\"Keine der einschl\u00e4gigen Kopfzeilen ist vorhanden.\",\"h_cookies\":\"Cookies aus der Antwort\",\"spalte_name\":\"Name\",\"h_befunde\":\"Befunde\",\"ja\":\"ja\",\"nein\":\"nein\",\"wert_keiner\":\"keine\",\"wert_leer\":\"leer\",\"fehler_kein_token\":\"Die Pr\u00fcfung lie\u00df sich nicht starten, weil reCAPTCHA nicht geladen wurde.\",\"fehler_captcha\":\"reCAPTCHA hat die Anfrage als automatisiert eingestuft. Ein Neuladen der Seite hilft in der Regel.\",\"fehler_zu_viele\":\"Die Grenze von {limit} Pr\u00fcfungen je Stunde ist f\u00fcr diese Adresse erreicht.\",\"fehler_adresse\":\"Diese Adresse l\u00e4sst sich nicht verwenden.\",\"fehler_zaehler\":\"Der Z\u00e4hler ist nicht erreichbar, deshalb wurde nichts abgerufen.\",\"fehler_pruefdienst\":\"Der reCAPTCHA-Dienst war nicht erreichbar.\",\"fehler_aufbau\":\"Der Dienst ist nicht richtig eingerichtet. Der Fehler liegt auf dieser Seite.\",\"fehler_eingabe\":\"Die Anfrage lie\u00df sich nicht lesen.\",\"fehler_methode\":\"Falsche Anfragemethode.\",\"fehler_netz\":\"Der Dienst war nicht erreichbar.\",\"fehler_antwort\":\"Die Antwort lie\u00df sich nicht lesen.\",\"fehler_abruf\":\"Die Adresse lie\u00df sich nicht abrufen.\",\"fehler_unbekannt\":\"Es ging etwas schief, wof\u00fcr es keine eigene Meldung gibt.\",\"grund_leer\":\"Es wurde nichts eingegeben.\",\"grund_zu_lang\":\"Die Adresse ist zu lang.\",\"grund_unlesbar\":\"Das l\u00e4sst sich nicht als Webadresse lesen.\",\"grund_schema\":\"Abgerufen werden nur http und https.\",\"grund_benutzerinfo\":\"Adressen mit Zugangsdaten darin werden abgelehnt.\",\"grund_kein_punkt\":\"Der Hostname braucht mindestens einen Punkt.\",\"grund_hostform\":\"Der Hostname hat eine unbrauchbare Form.\",\"grund_port\":\"Abgerufen werden nur die Ports 80, 443, 8080 und 8443.\",\"grund_gesperrter_bereich\":\"Diese Adresse zeigt in ein privates oder reserviertes Netz. Solche werden nie abgerufen, auch nicht \u00fcber eine Weiterleitung.\",\"grund_kein_dns\":\"Der Hostname l\u00f6st nicht auf.\",\"grund_zu_viele_spruenge\":\"Zu viele Weiterleitungen.\",\"befund_csp_fehlt\":\"Keine Content-Security-Policy. Nichts begrenzt, woher Skripte kommen d\u00fcrfen.\",\"befund_csp_unsafe_inline\":\"script-src erlaubt \\u0027unsafe-inline\\u0027. Eingebettetes Skript ist genau das, was ein Cross-Site-Scripting-Angriff einschleust - die Richtlinie ist damit vorhanden und gegen das, wof\u00fcr sie da ist, zahnlos.\",\"befund_csp_unsafe_eval\":\"script-src erlaubt \\u0027unsafe-eval\\u0027. Eine Zeichenkette kann damit wieder zu Code werden, was einen der Wege wieder \u00f6ffnet, die die Richtlinie schlie\u00dft.\",\"befund_csp_platzhalter\":\"Eine Skriptquelle ist ein Platzhalter - *, https: oder data:. Das erlaubt praktisch jede Herkunft.\",\"befund_csp_nonce_neben_inline\":\"Ein Nonce steht neben \\u0027unsafe-inline\\u0027. Browser, die den Nonce verstehen, \u00fcbergehen unsafe-inline; \u00e4ltere nicht. F\u00fcr einen Teil des Publikums entscheidet dann die schw\u00e4chere Regel.\",\"befund_csp_ohne_frame_ancestors\":\"Keine frame-ancestors. Die Seite darf eingerahmt werden, sofern nicht X-Frame-Options etwas anderes sagt.\",\"befund_csp_ohne_object_src\":\"Kein object-src. Ein \\u0027none\\u0027 dort ist billig und schlie\u00dft Plugin-Inhalte als Weg aus.\",\"befund_csp_ohne_skriptregel\":\"Weder default-src noch script-src. Die Richtlinie sagt \u00fcber Skripte nichts.\",\"befund_csp_nur_bericht\":\"Die Richtlinie ist im Berichtsmodus. Sie verhindert nichts.\",\"befund_hsts_fehlt\":\"Kein Strict-Transport-Security. Ein erster Aufruf \u00fcber http erreicht den Server, bevor die Weiterleitung wirken kann.\",\"befund_hsts_kurz\":\"max-age liegt unter einem halben Jahr. Browser vergessen die Regel wieder, bevor sie viel n\u00fctzt.\",\"befund_hsts_ohne_subdomains\":\"Ohne includeSubDomains gilt die Regel nur f\u00fcr diesen Host. Eine vergessene Unterdomain bleibt \u00fcber http erreichbar.\",\"befund_rahmen_ungeschuetzt\":\"Weder frame-ancestors noch X-Frame-Options. Die Seite darf in einen fremden Rahmen eingebettet werden.\",\"befund_xfo_neben_ancestors\":\"X-Frame-Options steht neben frame-ancestors. Browser, die die Richtlinie verstehen, \u00fcbergehen die \u00e4ltere Kopfzeile; das Paar schadet nicht, eines davon ist aber totes Gewicht.\",\"befund_referrer_fehlt\":\"Keine Referrer-Policy. Browser wenden dann ihre eigene Vorgabe an, und die f\u00e4llt unterschiedlich aus.\",\"befund_referrer_freizuegig\":\"Die Politik gibt die volle Adresse weiter. Pfade und Abfrageparameter wandern zu jedem Dritten mit, den die Seite l\u00e4dt.\",\"befund_nosniff_fehlt\":\"Kein X-Content-Type-Options: nosniff. Der Browser darf dann einen anderen Typ raten als den angegebenen.\",\"befund_permissions_fehlt\":\"Keine Permissions-Policy. Kamera, Mikrofon und Standort bleiben eingebetteten Inhalten von Haus aus zug\u00e4nglich.\",\"befund_server_version\":\"Die Server-Kopfzeile nennt eine Version. Das ist ein kostenloser Hinweis f\u00fcr jeden, der nach einer passenden Schwachstelle sucht.\",\"befund_powered_by\":\"X-Powered-By nennt eine Version.\",\"befund_powered_by_da\":\"X-Powered-By wird \u00fcberhaupt gesendet. F\u00fcr eine Besucherin hat das keinen Zweck.\",\"befund_cookie_ohne_secure\":\"Ein Cookie wird ohne Secure gesetzt. Es wandert damit auch \u00fcber eine unverschl\u00fcsselte Verbindung.\",\"befund_cookie_ohne_samesite\":\"Ein Cookie wird ohne SameSite gesetzt. Browser wenden ihre eigene Vorgabe an, und die f\u00e4llt unterschiedlich aus.\",\"befund_cookie_none_ohne_secure\":\"Ein Cookie tr\u00e4gt SameSite=None ohne Secure. Browser weisen diese Kombination rundheraus ab, das Cookie f\u00e4llt also schlicht weg.\"};<\/p>\n<p>    var ENDPUNKT = '\/lw-headercheck.php';\n    var SITEKEY = '6LcrPkEtAAAAAPo1QCOf-IIM2fCL0UfdJz4y2iSY';\n    var HSTS_HALBJAHR = 15768000;<\/p>\n<p>    \/\/ Kopfzeilen, deren Wert die Ausgabe unver\u00e4ndert zeigt.\n    var ZEIGEN = ['strict-transport-security', 'x-frame-options', 'referrer-policy',\n        'permissions-policy', 'x-content-type-options', 'cross-origin-opener-policy',\n        'cross-origin-embedder-policy', 'cross-origin-resource-policy', 'server', 'x-powered-by'];<\/p>\n<p>    \/\/ =========================================================================\n    \/\/ Bewertung - rein\n    \/\/ =========================================================================<\/p>\n<p>    function liste(w) { return Array.isArray(w) ? w : []; }\n    function zahl(w) { return (typeof w === 'number' && isFinite(w)) ? w : null; }<\/p>\n<p>    function bewerten(antwort) {\n        var a = antwort || {};\n        if (a.fehler) {\n            return { fehler: a.fehler, grund: a.grund || null, limit: zahl(a.limit), kette: liste(a.kette) };\n        }\n        var kopf = (a.kopf && typeof a.kopf === 'object' && !Array.isArray(a.kopf)) ? a.kopf : {};\n        var bau = (a.bausteine && typeof a.bausteine === 'object') ? a.bausteine : {};\n        var csp = (a.csp && typeof a.csp === 'object') ? a.csp : null;\n        var hsts = (a.hsts && typeof a.hsts === 'object') ? a.hsts : null;<\/p>\n<p>        var gezeigt = [];\n        ZEIGEN.forEach(function (n) {\n            if (typeof kopf[n] === 'string' && kopf[n] !== '') { gezeigt.push({ name: n, wert: kopf[n] }); }\n        });<\/p>\n<p>        var direktiven = [];\n        if (csp && csp.direktiven && typeof csp.direktiven === 'object') {\n            Object.keys(csp.direktiven).forEach(function (d) {\n                direktiven.push({ name: d, quellen: liste(csp.direktiven[d]) });\n            });\n        }<\/p>\n<p>        return {\n            fehler: null,\n            url: a.url || '', endziel: a.endziel || a.url || '',\n            status: zahl(a.status), dauer: zahl(a.dauer_ms), kette: liste(a.kette),\n            bausteine: {\n                csp: bau.csp || 'fehlt', hsts: bau.hsts || 'fehlt',\n                rahmen: bau.rahmen || 'fehlt', referrer: bau.referrer || 'fehlt'\n            },\n            urteil: a.urteil || 'offen',\n            cspSatz: (kopf['content-security-policy'] || kopf['content-security-policy-report-only'] || null),\n            cspNurBericht: !!(csp && csp.nur_bericht),\n            direktiven: direktiven,\n            hsts: hsts ? {\n                maxAge: zahl(hsts.max_age), subdomains: !!hsts.subdomains,\n                preload: !!hsts.preload,\n                kurz: (zahl(hsts.max_age) === null || hsts.max_age < HSTS_HALBJAHR)\n            } : null,\n            kopfzeilen: gezeigt,\n            cookies: liste(a.cookies),\n            befunde: liste(a.befunde)\n        };\n    }\n\n    \/\/ =========================================================================\n    \/\/ Abruf\n    \/\/ =========================================================================\n\n    function skriptLaden() {\n        return new Promise(function (auf) {\n            if (window.grecaptcha) { auf(true); return; }\n            var s = document.createElement('script');\n            s.src = 'https:\/\/www.google.com\/recaptcha\/api.js?render=' + SITEKEY;\n            s.onload = function () { auf(true); };\n            s.onerror = function () { auf(false); };\n            document.head.appendChild(s);\n            setTimeout(function () { auf(!!window.grecaptcha); }, 8000);\n        });\n    }\n    \/** grecaptcha.ready abwarten - execute ist bei onload noch nicht da. *\/\n    function tokenHolen() {\n        return skriptLaden().then(function (da) {\n            if (!da || !window.grecaptcha || !window.grecaptcha.ready) { return null; }\n            return new Promise(function (auf) {\n                var fertig = false;\n                function einmal(w) { if (!fertig) { fertig = true; auf(w); } }\n                setTimeout(function () { einmal(null); }, 12000);\n                try {\n                    window.grecaptcha.ready(function () {\n                        if (fertig) { return; }\n                        if (!window.grecaptcha.execute) { einmal(null); return; }\n                        window.grecaptcha.execute(SITEKEY, { action: 'headercheck' })\n                            .then(function (t) { einmal(t || null); }, function () { einmal(null); });\n                    });\n                } catch (e) { einmal(null); }\n            });\n        }, function () { return null; });\n    }\n    function abfragen(url) {\n        return tokenHolen().then(function (token) {\n            return fetch(ENDPUNKT, {\n                method: 'POST', headers: { 'Content-Type': 'application\/json' },\n                body: JSON.stringify({ url: url, token: token || '' })\n            }).then(function (r) {\n                return r.json().then(function (j) { return j; }, function () { return { fehler: 'antwort' }; });\n            }, function () { return { fehler: 'netz' }; });\n        });\n    }\n\n    window.LW_TEST = window.LW_TEST || {};\n    window.LW_TEST.HC = { bewerten: bewerten, darstellen: null, ENDPUNKT: ENDPUNKT, ZEIGEN: ZEIGEN, T: T };\n\n    \/\/ =========================================================================\n    \/\/ Oberflaeche\n    \/\/ =========================================================================\n\n    var btn = document.getElementById('hc-btn');\n    var out = document.getElementById('hc-ausgabe');\n    if (!btn || !out) { return; }\n\n    function el(tag, stil, text) {\n        var e = document.createElement(tag);\n        if (stil) { e.setAttribute('style', stil); }\n        if (text !== undefined) { e.textContent = text; }\n        return e;\n    }\n    function wert(id) { var e = document.getElementById(id); return e ? e.value : ''; }\n\n    var UEBERSCHRIFT = 'font-family: \"Nunito Sans\", sans-serif; font-weight: 700; color: var(--text-primary, #e8e8ee); font-size: 0.92rem; margin: 18px 0 8px;';\n    var ZELLE = 'padding: 5px 12px 5px 0; color: var(--text-secondary, #a0a0b0); font-size: 0.87rem;';\n    var ZELLE_WERT = 'padding: 5px 12px 5px 0; color: var(--text-primary, #e8e8ee); font-size: 0.87rem; font-family: monospace; word-break: break-all;';\n    var VORFORM = 'background: var(--bg-body, #14141a); border: 1px solid var(--border, #2a2a35); border-radius: 6px; padding: 10px; color: var(--text-primary, #e8e8ee); font-family: monospace; font-size: 0.78rem; white-space: pre-wrap; word-break: break-all; margin: 0;';\n    var GUT = ' color: #7ee787;';\n    var WARN = ' color: #ffa94d;';\n    var GRAU = ' color: #8a8a99;';\n\n    function farbe(a) { return a === 'gut' ? GUT : WARN; }\n    function gitter(sp) {\n        return el('div', 'display: grid; grid-template-columns: ' + sp + '; gap: 0 18px; align-items: baseline;');\n    }\n    function paar(g, n, w, stil) {\n        g.appendChild(el('div', ZELLE, n));\n        g.appendChild(el('div', ZELLE_WERT + (stil || ''), w));\n    }\n    function kopfZeile(g, sp) {\n        sp.forEach(function (s) {\n            g.appendChild(el('div', ZELLE + ' font-weight: 700; color: var(--text-primary, #e8e8ee);', s));\n        });\n    }\n\n    function darstellen(b, ziel) {\n        ziel.innerHTML = '';\n        if (b.fehler) {\n            var text = T['fehler_' + b.fehler] || T.fehler_unbekannt;\n            if (b.grund &#038;&#038; T['grund_' + b.grund]) { text = text + ' ' + T['grund_' + b.grund]; }\n            if (b.limit !== null) { text = text.replace('{limit}', String(b.limit)); }\n            ziel.appendChild(el('p', ZELLE + WARN + ' margin: 0;', text));\n            return;\n        }\n\n        ziel.appendChild(el('div', UEBERSCHRIFT, T.h_uebersicht));\n        var g = gitter('auto auto');\n        paar(g, T.zeile_endziel, b.endziel);\n        paar(g, T.zeile_status, String(b.status === null ? '-' : b.status));\n        if (b.kette.length > 1) { paar(g, T.zeile_spruenge, String(b.kette.length - 1), WARN); }\n        paar(g, 'Content-Security-Policy', T['ampel_' + b.bausteine.csp], farbe(b.bausteine.csp));\n        paar(g, 'Strict-Transport-Security', T['ampel_' + b.bausteine.hsts], farbe(b.bausteine.hsts));\n        paar(g, T.zeile_rahmen, T['ampel_' + b.bausteine.rahmen], farbe(b.bausteine.rahmen));\n        paar(g, 'Referrer-Policy', T['ampel_' + b.bausteine.referrer], farbe(b.bausteine.referrer));\n        if (b.dauer !== null) { paar(g, T.zeile_dauer, b.dauer + ' ms', GRAU); }\n        ziel.appendChild(g);\n        ziel.appendChild(el('div', 'margin: 10px 0 0; font-size: 0.9rem; font-weight: 700;'\n            + (b.urteil === 'geschlossen' ? GUT : WARN), T['urteil_' + b.urteil]));<\/p>\n<p>        \/\/ --- CSP ---\n        ziel.appendChild(el('div', UEBERSCHRIFT, T.h_csp));\n        if (!b.cspSatz) {\n            ziel.appendChild(el('p', ZELLE + WARN + ' margin: 0;', T.csp_keine));\n        } else {\n            if (b.cspNurBericht) {\n                ziel.appendChild(el('p', ZELLE + WARN + ' margin: 0 0 8px;', T.csp_nur_bericht_hinweis));\n            }\n            ziel.appendChild(el('pre', VORFORM, b.cspSatz));\n            if (b.direktiven.length) {\n                var gd = gitter('auto auto');\n                b.direktiven.forEach(function (d) {\n                    paar(gd, d.name, d.quellen.length ? d.quellen.join(' ') : T.wert_leer, GRAU);\n                });\n                ziel.appendChild(gd);\n            }\n        }<\/p>\n<p>        \/\/ --- HSTS ---\n        ziel.appendChild(el('div', UEBERSCHRIFT, T.h_hsts));\n        if (!b.hsts) {\n            ziel.appendChild(el('p', ZELLE + WARN + ' margin: 0;', T.hsts_keine));\n        } else {\n            var gh = gitter('auto auto');\n            paar(gh, T.zeile_maxage, (b.hsts.maxAge === null ? '-' : b.hsts.maxAge + ' ' + T.einheit_sekunden)\n                + (b.hsts.maxAge !== null ? '  (' + Math.round(b.hsts.maxAge \/ 86400) + ' ' + T.einheit_tage + ')' : ''),\n                b.hsts.kurz ? WARN : GUT);\n            paar(gh, 'includeSubDomains', b.hsts.subdomains ? T.ja : T.nein, b.hsts.subdomains ? GUT : WARN);\n            paar(gh, 'preload', b.hsts.preload ? T.ja : T.nein, GRAU);\n            ziel.appendChild(gh);\n        }<\/p>\n<p>        \/\/ --- Weitere Kopfzeilen ---\n        ziel.appendChild(el('div', UEBERSCHRIFT, T.h_kopfzeilen));\n        if (!b.kopfzeilen.length) {\n            ziel.appendChild(el('p', ZELLE + ' margin: 0;', T.kopfzeilen_keine));\n        } else {\n            var gk = gitter('auto auto');\n            b.kopfzeilen.forEach(function (z) { paar(gk, z.name, z.wert, GRAU); });\n            ziel.appendChild(gk);\n        }<\/p>\n<p>        \/\/ --- Cookies ---\n        if (b.cookies.length) {\n            ziel.appendChild(el('div', UEBERSCHRIFT, T.h_cookies));\n            var gc = gitter('auto auto auto auto');\n            kopfZeile(gc, [T.spalte_name, 'Secure', 'HttpOnly', 'SameSite']);\n            b.cookies.forEach(function (c) {\n                gc.appendChild(el('div', ZELLE_WERT, c.name || '-'));\n                gc.appendChild(el('div', ZELLE + (c.secure ? GUT : WARN), c.secure ? T.ja : T.nein));\n                gc.appendChild(el('div', ZELLE + GRAU, c.httponly ? T.ja : T.nein));\n                gc.appendChild(el('div', ZELLE + (c.samesite ? '' : WARN), c.samesite || T.wert_keiner));\n            });\n            ziel.appendChild(gc);\n        }<\/p>\n<p>        \/\/ --- Befunde ---\n        if (b.befunde.length) {\n            ziel.appendChild(el('div', UEBERSCHRIFT, T.h_befunde));\n            var l = el('ul', 'margin: 0 0 0 18px; padding: 0; color: var(--text-secondary, #a0a0b0); font-size: 0.87rem; line-height: 1.65;');\n            b.befunde.forEach(function (f) {\n                var t = T['befund_' + f];\n                if (t) { l.appendChild(el('li', '', t)); }\n            });\n            ziel.appendChild(l);\n        }\n    }\n    window.LW_TEST.HC.darstellen = darstellen;<\/p>\n<p>    var laeuft = false;\n    btn.addEventListener('click', function () {\n        if (laeuft) { return; }\n        laeuft = true; btn.disabled = true;\n        out.innerHTML = '';\n        out.appendChild(el('p', ZELLE + GRAU + ' margin: 0;', T.laeuft));\n        abfragen(wert('hc-url')).then(function (a) {\n            darstellen(bewerten(a), out); laeuft = false; btn.disabled = false;\n        }, function () {\n            darstellen(bewerten({ fehler: 'netz' }), out); laeuft = false; btn.disabled = false;\n        });\n    });\n})();\n<\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Liest die Antwortkopfzeilen einer Adresse und sagt, was sie tats\u00e4chlich bewirken: eine Richtlinie mit unsafe-inline ist vorhanden und zahnlos, ein HSTS von f\u00fcnf Minuten sch\u00fctzt niemanden, und eine fehlende Rahmenregel ist eine fehlende Rahmenregel.<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":9283,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"template-tool-base.php","meta":{"footnotes":""},"tags":[92265,92214,92071],"class_list":["post-13427","page","type-page","status-publish","hentry","tag-prywatnosc-danych-pl-de","tag-devops-de","tag-web-security-de"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Pr\u00fcfer f\u00fcr HTTP-Sicherheitskopfzeilen - Lukas Wojcik - Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/http-security-header-checker\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Pr\u00fcfer f\u00fcr HTTP-Sicherheitskopfzeilen - Lukas Wojcik - Blog\" \/>\n<meta property=\"og:description\" content=\"Liest die Antwortkopfzeilen einer Adresse und sagt, was sie tats\u00e4chlich bewirken: eine Richtlinie mit unsafe-inline ist vorhanden und zahnlos, ein HSTS von f\u00fcnf Minuten sch\u00fctzt niemanden, und eine fehlende Rahmenregel ist eine fehlende Rahmenregel.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/http-security-header-checker\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/og-default.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/werkzeuge\\\/http-security-header-checker\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/werkzeuge\\\/http-security-header-checker\\\/\",\"name\":\"Pr\u00fcfer f\u00fcr HTTP-Sicherheitskopfzeilen - Lukas Wojcik - Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"datePublished\":\"2026-08-31T13:31:17+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/werkzeuge\\\/http-security-header-checker\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/werkzeuge\\\/http-security-header-checker\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/werkzeuge\\\/http-security-header-checker\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Toolbox\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/toolbox-2\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Pr\u00fcfer f\u00fcr HTTP-Sicherheitskopfzeilen\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\",\"name\":\"Lukas Wojcik - Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\",\"name\":\"luky\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"width\":424,\"height\":636,\"caption\":\"luky\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\"},\"sameAs\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Pr\u00fcfer f\u00fcr HTTP-Sicherheitskopfzeilen - Lukas Wojcik - Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/http-security-header-checker\/","og_locale":"en_US","og_type":"article","og_title":"Pr\u00fcfer f\u00fcr HTTP-Sicherheitskopfzeilen - Lukas Wojcik - Blog","og_description":"Liest die Antwortkopfzeilen einer Adresse und sagt, was sie tats\u00e4chlich bewirken: eine Richtlinie mit unsafe-inline ist vorhanden und zahnlos, ein HSTS von f\u00fcnf Minuten sch\u00fctzt niemanden, und eine fehlende Rahmenregel ist eine fehlende Rahmenregel.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/http-security-header-checker\/","og_site_name":"Lukas Wojcik - Blog","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/og-default.jpg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/http-security-header-checker\/","url":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/http-security-header-checker\/","name":"Pr\u00fcfer f\u00fcr HTTP-Sicherheitskopfzeilen - Lukas Wojcik - Blog","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"datePublished":"2026-08-31T13:31:17+00:00","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/http-security-header-checker\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/http-security-header-checker\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/http-security-header-checker\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lukaswojcik.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Toolbox","item":"https:\/\/www.lukaswojcik.com\/blog\/toolbox-2\/"},{"@type":"ListItem","position":3,"name":"Pr\u00fcfer f\u00fcr HTTP-Sicherheitskopfzeilen"}]},{"@type":"WebSite","@id":"https:\/\/www.lukaswojcik.com\/blog\/#website","url":"https:\/\/www.lukaswojcik.com\/blog\/","name":"Lukas Wojcik - Blog","description":"","publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.lukaswojcik.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9","name":"luky","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","width":424,"height":636,"caption":"luky"},"logo":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg"},"sameAs":["https:\/\/www.lukaswojcik.com\/blog"]}]}},"_links":{"self":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/13427","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/comments?post=13427"}],"version-history":[{"count":0,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/13427\/revisions"}],"up":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/9283"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=13427"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=13427"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}