Analysezeitpunkt: 2026-11-05 02:06:52
Gesamtbewertung
⚠ Diese Website weist schwerwiegende DSGVO-Mängel auf. Es besteht dringender Handlungsbedarf.
DSGVO-Probleme erkannt (4):
❌ 15 Drittanbieter-Server außerhalb der EU/des EWR — Datenübermittlung ohne Rechtsgrundlage kann gegen Art. 44–49 DSGVO verstoßen.
Betroffene Server außerhalb der EU:
❌ 3 Tracking-Dienst(e) erkannt — ohne vorherige Einwilligung (Opt-in) ein Verstoß gegen Art. 6 Abs. 1 DSGVO und § 25 TDDDG.
Erkannte Tracker:
⚠ Drittanbieter-Cookies werden gesetzt — ohne Einwilligung ein Verstoß gegen § 25 TDDDG.
⚠ Fehlende oder unsichere Referrer-Policy — URLs mit personenbezogenen Daten können an Dritte weitergegeben werden.
Hinweis: Diese automatisierte Analyse ersetzt keine rechtliche Beratung. Für eine vollständige DSGVO-Bewertung konsultieren Sie einen Datenschutzbeauftragten.
↓ Detaillierte Ergebnisse zu allen Kategorien finden Sie weiter unten.
Die Website nutzt eine verschlüsselte Verbindung (HTTPS).
Neueste Verschlüsselung aktiv (TLS 1.3 — TLSv1.3).
Das Sicherheitszertifikat ist gültig (läuft ab am 2026-12-27).
Starke Verschlüsselungsmethode (TLS_AES_256_GCM_SHA384, 256 Bit).
HSTS ist aktiviert — der Browser wird angewiesen, immer die verschlüsselte Verbindung zu nutzen.
HSTS-Dauer: nur 7889238 Sekunden — zu kurz. Mindestens 180 Tage empfohlen.
Ihr HSTS-Zeitraum ist zu kurz (nur 7889238 Sekunden) — Browser „vergessen" die HTTPS-Pflicht schnell wieder. Empfohlen: mindestens 180 Tage (15552000 Sekunden), besser 1 Jahr (31536000).
Datei: .htaccess im Web-Root
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
</IfModule>⚠ Falls bereits ein anderer Header-set für Strict-Transport-Security existiert, diesen ersetzen (nicht zusätzlich einfügen, sonst wird der erste verworfen).
Datei: .htaccess im WordPress-Root
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
</IfModule>⚠ Vorhandenen HSTS-Eintrag im .htaccess durch diese Zeile ersetzen.
✓ So prüfen Sie, ob es funktioniert: curl -I https://ihre-domain.de | grep -i strict — der max-age-Wert muss mindestens 15552000 sein.
Content Security Policy vorhanden (via HTTP-Header).
Keine Einschränkung für Skripte definiert (script-src/default-src fehlt).
Ihre CSP ist vorhanden, aber ohne script-src — d.h. für Skripte gilt keine Einschränkung. Genau die sind aber der häufigste XSS-Angriffsvektor. Ergänzen Sie script-src zusammen mit den anderen wichtigen Direktiven.
Datei: .htaccess im Web-Root
<IfModule mod_headers.c>
Header always set Content-Security-Policy "default-src 'self'; img-src 'self' data: https:; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline'; font-src 'self' https: data:; object-src 'none'; frame-ancestors 'self'; base-uri 'self'"
</IfModule>⚠ Bestehende CSP-Zeile ersetzen (NICHT zusätzlich eintragen). Diese Policy ist bewusst pragmatisch — sie erlaubt Inline-Styles und data:-URIs für Bilder, weil fast alle Themes (besonders WordPress!) das brauchen. Wenn Sie externe Skripte nutzen (z.B. CDN), Domain in script-src anhängen: script-src 'self' https://cdn.example.com. Wer maximale Sicherheit will, kürzt style-src später schrittweise auf 'self' und prüft im Browser (F12 → Konsole), ob keine Inline-Styles mehr klagen.
Datei: .htaccess im WordPress-Root
<IfModule mod_headers.c>
Header always set Content-Security-Policy "default-src 'self'; img-src 'self' data: https:; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline'; font-src 'self' https: data:; object-src 'none'; frame-ancestors 'self'; base-uri 'self'"
</IfModule>⚠ Vorhandenen CSP-Header ersetzen. WICHTIG für WordPress: img-src mit data: erlaubt Emoji + Admin-Bar-SVGs, style-src 'unsafe-inline' erlaubt die zahlreichen Inline-Styles aus Themes und Plugins — ohne diese beiden Direktiven wird die Seite optisch zerschossen. Häufig genutzte WP-Skript-Quellen für script-src: 'self' (eigene), https://www.googletagmanager.com (GTM), https://www.google-analytics.com (GA) — bei Bedarf hinter 'self' mit Leerzeichen anhängen.
Datei: functions.php Ihres CHILD-Themes
add_action('send_headers', function () {
header("Content-Security-Policy: default-src 'self'; img-src 'self' data: https:; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline'; font-src 'self' https: data:; object-src 'none'; frame-ancestors 'self'; base-uri 'self'");
});⚠ Achten Sie auf bestehende send_headers-Hooks — nur einer pro Datei aktiv halten. Backup der functions.php vorher!
✓ So prüfen Sie, ob es funktioniert: F12 → Netzwerk → Response Header content-security-policy enthält „script-src 'self'". Konsole: keine Skript-Blockaden, keine „Refused to load…"-Meldungen.
Einbettungsschutz (frame-ancestors) ist konfiguriert — schützt vor Clickjacking.
Keine Referrer-Policy gesetzt. Beim Klick auf externe Links wird die vollständige Seiten-URL an andere Websites weitergegeben.
Ohne Referrer-Policy übermittelt der Browser bei jedem Klick die komplette URL Ihrer aktuellen Seite (inkl. Suchbegriffen, Nutzernamen in URL-Parametern) an die Ziel-Website. Datenschutzrelevant nach Art. 5 DSGVO. Empfohlene sichere Einstellung: strict-origin-when-cross-origin.
Datei: .htaccess im Web-Root
<IfModule mod_headers.c>
Header always set Referrer-Policy "strict-origin-when-cross-origin"
</IfModule>⚠ „strict-origin-when-cross-origin" ist der moderne Standard: bei Klicks auf andere Domains wird nur Ihre Domain (ohne Pfad/Parameter) gesendet — bei internen Klicks die volle URL. Strenger wäre „no-referrer" (gar nichts senden), aber das bricht manche Analyse-Tools.
Datei: .htaccess im WordPress-Root
<IfModule mod_headers.c>
Header always set Referrer-Policy "strict-origin-when-cross-origin"
</IfModule>⚠ WordPress sendet seit Version 4.9 standardmäßig schon ein meta-Tag mit dieser Policy — der HTTP-Header oben überschreibt aber für alle Ressourcen (Bilder, Skripte), nicht nur das HTML-Dokument.
Datei: functions.php Ihres CHILD-Themes
add_action('send_headers', function () {
header('Referrer-Policy: strict-origin-when-cross-origin');
});⚠ Backup vor jeder functions.php-Änderung anlegen.
✓ So prüfen Sie, ob es funktioniert: F12 → Netzwerk → erste Anfrage → Response Headers — „referrer-policy: strict-origin-when-cross-origin" muss sichtbar sein.
MIME-Typ-Schutz aktiv (nosniff) — Browser interpretieren Dateien nicht falsch.
Clickjacking-Schutz aktiv über CSP frame-ancestors.
Keine Permissions-Policy gesetzt. Drittanbieter-Skripte könnten auf Kamera, Mikrofon oder Standort zugreifen.
Die Permissions-Policy kontrolliert, ob Skripte (auch von Drittanbietern) auf Kamera, Mikrofon, Standort, Bewegungssensoren etc. zugreifen dürfen. DSGVO-relevant, weil sensible Geräte-APIs sonst unbemerkt angesprochen werden können.
Datei: .htaccess im Web-Root
<IfModule mod_headers.c>
Header always set Permissions-Policy "camera=(), microphone=(), geolocation=(), payment=(), usb=(), accelerometer=(), gyroscope=(), magnetometer=(), interest-cohort=()"
</IfModule>⚠ „()" am Ende heißt: kein Aufrufer (auch nicht Ihre eigene Seite) darf diese API nutzen. Falls Sie z.B. eine Karten-Funktion mit Geolokalisierung haben: geolocation=(self) statt geolocation=(). „interest-cohort=()" deaktiviert Googles FLoC-Tracking.
Datei: .htaccess im WordPress-Root
<IfModule mod_headers.c>
Header always set Permissions-Policy "camera=(), microphone=(), geolocation=(), payment=(), usb=(), interest-cohort=()"
</IfModule>⚠ Standard-WordPress braucht keine dieser APIs. Wenn Sie ein Plugin nutzen, das z.B. die Kamera braucht (QR-Scanner, Video-Upload): die entsprechende API auf „(self)" setzen.
Datei: functions.php Ihres CHILD-Themes
add_action('send_headers', function () {
header('Permissions-Policy: camera=(), microphone=(), geolocation=(), payment=(), usb=(), interest-cohort=()');
});⚠ Backup vor jeder Änderung an functions.php.
✓ So prüfen Sie, ob es funktioniert: F12 → Netzwerk → Response Header: „permissions-policy" sichtbar.
10 Erstanbieter- und 7 Drittanbieter-Cookie(s).
7 Drittanbieter-Cookie(s) erkannt. Diese können genutzt werden, um Sie über verschiedene Websites hinweg zu verfolgen.
Drittanbieter-Cookies (z.B. von Google, Facebook) verfolgen Besucher über Websites hinweg. Nach § 25 TDDDG und Art. 6 DSGVO ist VOR dem Setzen eine ausdrückliche Einwilligung Pflicht. Lösung in drei Schritten: (1) prüfen, welche externen Dienste die Cookies setzen, (2) nicht zwingend nötige Dienste entfernen, (3) für unverzichtbare Dienste ein Consent-Banner einbauen, das die Cookies erst nach „Zustimmen" lädt.
WordPress-Plugin: Cookie-Consent-Plugins für WordPress: „Complianz" (kostenlos, sehr gründlich), „Borlabs Cookie" (kostenpflichtig, deutsch, sehr gut für Profis), „Real Cookie Banner" (DSGVO-fokussiert). Wichtig bei der Konfiguration: alle Tracking-Dienste auf „Vor Einwilligung NICHT laden" stellen — die meisten Plugins erkennen Standard-Dienste (GA, Maps, YouTube) automatisch.
✓ So prüfen Sie, ob es funktioniert: Browser im Inkognito-Modus öffnen, F12 → Tab „Application" → „Cookies" → ihre-domain.de. VOR dem Klick auf „Zustimmen" dürfen dort KEINE Cookies von google.com, facebook.com etc. stehen. NACH Zustimmung dann ja.
7 von 17 Cookie(s) ohne Secure-Flag — werden auch über unverschlüsselte Verbindungen gesendet.
Cookies ohne „Secure"-Flag werden auch über unverschlüsselte HTTP-Verbindungen gesendet — und können dort von jedem im selben WLAN abgefangen werden. Bei reinen HTTPS-Sites gibt es keinen Grund, das Flag wegzulassen.
Datei: .htaccess im Web-Root
<IfModule mod_headers.c>
Header always edit Set-Cookie "^(.*)$" "$1; Secure" "expr=!(resp('Set-Cookie') -strmatch '*Secure*')"
</IfModule>⚠ Dieser Header hängt „; Secure" an Cookies an, die es noch nicht haben. Funktioniert ab Apache 2.4. Saubere Alternative: das setzende Skript korrigieren (PHP: session.cookie_secure=1 in php.ini, bzw. setcookie()-Parameter „secure" auf true).
Datei: functions.php Ihres CHILD-Themes
add_filter('secure_logged_in_cookie', '__return_true');
add_action('init', function () {
if (!headers_sent()) {
@ini_set('session.cookie_secure', '1');
@ini_set('session.cookie_httponly', '1');
@ini_set('session.cookie_samesite', 'Lax');
}
});⚠ Setzt Secure-Flag für WordPress-Login-Cookies und PHP-Session-Cookies. Bei Plugins, die eigene Cookies setzen, muss man dort separat ansetzen (Plugin-Einstellungen prüfen).
WordPress-Plugin: Plugins, die Cookies setzen (Cache, Anti-Spam, A/B-Test), haben oft in den Einstellungen Schalter wie „Secure Cookies" oder „nur über HTTPS".
✓ So prüfen Sie, ob es funktioniert: F12 → Application → Cookies → ihre-domain.de. Spalte „Secure" sollte bei allen Cookies ein Häkchen zeigen.
14 von 17 Cookie(s) ohne HttpOnly-Flag — könnten von Schadcode ausgelesen werden.
Cookies ohne „HttpOnly"-Flag können von JavaScript ausgelesen werden — ein XSS-Angreifer kann damit Session-Cookies stehlen und sich als der eingeloggte Nutzer ausgeben. Setzen Sie HttpOnly für alle Cookies, die JavaScript nicht aktiv selbst braucht.
Datei: .htaccess im Web-Root
<IfModule mod_headers.c>
Header always edit Set-Cookie "^(.*)$" "$1; HttpOnly" "expr=!(resp('Set-Cookie') -strmatch '*HttpOnly*')"
</IfModule>⚠ Sauberer wäre, Cookies direkt mit HttpOnly zu setzen (PHP: setcookie(..., [..., 'httponly'=>true])). Ausnahme: Cookies, die JS aktiv lesen muss (z.B. manche Consent-Cookies).
Datei: functions.php Ihres CHILD-Themes (oder besser wp-config.php)
@ini_set('session.cookie_httponly', '1');
@ini_set('session.cookie_secure', '1');⚠ WordPress-Login-Cookies sind seit Version 2.x bereits HttpOnly. Wenn Sie ein Plugin nutzen, das Session-Cookies setzt (z.B. WooCommerce-Cart vor Login), prüfen Sie dort die Einstellungen.
✓ So prüfen Sie, ob es funktioniert: F12 → Application → Cookies → Spalte „HttpOnly" zeigt überall Häkchen (außer bei bewusst JS-lesbaren Cookies wie z.B. dem Consent-Cookie).
11 von 17 Cookie(s) ohne SameSite-Schutz — werden bei Anfragen von anderen Websites mitgesendet.
Ohne „SameSite"-Attribut werden Cookies bei Anfragen von fremden Websites an Sie mitgesendet — Grundlage für CSRF-Angriffe (eine fremde Seite kann im Hintergrund Aktionen in Ihrem Namen auslösen, weil das Login-Cookie mitgeschickt wird). Setzen Sie SameSite=Lax als Minimum.
Datei: .htaccess im Web-Root
<IfModule mod_headers.c>
Header always edit Set-Cookie "^(.*)$" "$1; SameSite=Lax" "expr=!(resp('Set-Cookie') -strmatch '*SameSite*')"
</IfModule>⚠ SameSite=Lax ist ein guter Standard. Strict ist sicherer, bricht aber externe Verlinkungen (User klickt von Google auf Ihre Seite — Cookies werden NICHT gesendet, Login ist weg). None erlaubt Cross-Site, braucht zwingend „; Secure".
Datei: wp-config.php (oberhalb von „/* That’s all, stop editing! */")
@ini_set('session.cookie_samesite', 'Lax');
@ini_set('session.cookie_secure', '1');
@ini_set('session.cookie_httponly', '1');⚠ Setzt SameSite/Secure/HttpOnly für PHP-Session-Cookies. WordPress-Login-Cookies sind seit WP 6.2 standardmäßig SameSite=Lax. Bei älteren Versionen unbedingt updaten.
✓ So prüfen Sie, ob es funktioniert: F12 → Application → Cookies → Spalte „SameSite" — sollte überall „Lax" oder „Strict" stehen, nicht leer.
| Name | Domain | Verschlüsselt | Nur Server | SameSite |
|---|---|---|---|---|
| _shopify_essential | aeris.de | Ja | Ja | Lax |
| _shopify_essential | www.aeris.de | Ja | Ja | Lax |
| localization | www.aeris.de | Nein | Nein | Lax |
| cart_currency | www.aeris.de | Nein | Nein | Lax |
| _uetmsdns | www.aeris.de | Ja | Nein | Strict |
| _pandectes_gdpr | .www.aeris.de | Nein | Nein | Lax |
| _tt_enable_cookie | .aeris.de | Nein | Nein | None |
| _ttp | .aeris.de | Nein | Nein | None |
| ttcsid | .aeris.de | Nein | Nein | None |
| ttcsid_D2MNRGJC77U7BITDITQ0 | .aeris.de | Nein | Nein | None |
| Name | Domain | Verschlüsselt | Nur Server | SameSite |
|---|---|---|---|---|
| _ttp | .tiktok.com | Ja | Nein | None |
| bcookie | .linkedin.com | Ja | Nein | None |
| li_gc | .linkedin.com | Ja | Nein | None |
| lidc | .linkedin.com | Ja | Nein | None |
| __cf_bm | .linkedin.com | Ja | Ja | None |
| u8x7eovwf3h6_uid | .ad-srv.net | Ja | Nein | None |
| jg2kf3qb0kis_uid | .ad-srv.net | Ja | Nein | None |
7 localStorage- und 8 sessionStorage-Einträge gefunden.
Umfangreiche localStorage-Nutzung — könnte auf Tracking oder Fingerprinting hindeuten.
Umfangreiche Nutzung von localStorage kann auf Tracking oder Fingerprinting hindeuten (localStorage ist nicht vom Cookie-Consent erfasst, taugt aber zur Wiedererkennung). Prüfen Sie, ob die Daten wirklich nötig sind — und wenn ja: in die Datenschutzerklärung aufnehmen.
WordPress-Plugin: localStorage-Belegungen kommen meist aus Themes oder Plugins (Cookie-Banner-Status, Warenkorb, A/B-Testing, Slider-Position). Vorgehen: F12 → Application → Local Storage → ihre-domain.de — Einträge ansehen, mutmaßlichen Verursacher (Plugin-Name im Schlüssel) identifizieren, in den Plugin-Einstellungen prüfen oder Plugin entfernen, wenn nicht notwendig.
✓ So prüfen Sie, ob es funktioniert: Inkognito-Browser → Seite einmal laden → F12 → Application → Local Storage — möglichst wenig Einträge, jedenfalls keine ohne Funktionsbezug.
| Name | Wert |
|---|---|
| forms_session_id | 9dc4259b-7b4e-4257-aa74-3c564eb6f58f |
| eng_mt | {"ver":36,"sessionStartTime":1793840800499,"scrollDepth":0,"sessionDepth":["-183 |
| forms_session_expires_at | 1793842600712 |
| forms_visit_count | 1 |
| forms_previous_session_id | 9dc4259b-7b4e-4257-aa74-3c564eb6f58f |
| qab_render_beaconed | 1795050401424 |
| vsai | bu+B+1ScFuNaxEJ4b7YvejzB33zXzrFUdm7r0uUnfYBqAIgaZYICSsA8P0JGxOtrmkAyMFJ4Sg0BCh3m |
| Name | Wert |
|---|---|
| consentHeader | 3.ampS_DE_t_f_75*ffFKKR9Ca9gHrdxuXKg |
| _shs_state | {"wd":true,"ua":false,"cf":true,"be":true,"nm":false,"nc":false,"ka":false,"sa": |
| tt_appInfo | {"platform":"pc"} |
| qab_payload | {"shop_active":"yes","record":true,"bars":[{"bar_id":262267,"updated_on":"2025-0 |
| tt_sessionId | "287f9886-d8b5-11f1-a67a-064693b1cc49::GlIFJWvBfrbKCZ_FlS0o" |
| tt_pixel_session_index | {"index":0,"main":0} |
| orbeSession | {"meta":{"fromCache":false,"ip":"2a01:4f8:d0a:3163::2","path":"/api/v1/geolocati |
| qab_previous_pathname | / |
117 Anfrage(n) an 31 verschiedene Drittanbieter-Server.
15 Drittanbieter-Server außerhalb der EU/des EWR — potenziell problematisch für die DSGVO.
DSGVO-relevant: Daten Ihrer Besucher (mindestens IP-Adresse + User-Agent) werden an Server außerhalb der EU/des EWR übertragen. Seit dem Schrems-II-Urteil (2020) ist das nur mit Standardvertragsklauseln + zusätzlichen Schutzmaßnahmen UND vorheriger Einwilligung zulässig. Beste Lösung: durch EU-Alternativen ersetzen, wo möglich.
WordPress-Plugin: Häufige Übeltäter und EU-Alternativen: Google Fonts → Bunny Fonts oder lokal hosten (Plugin „OMGF — Host Google Fonts Locally"). Google Analytics → Matomo (selbst gehostet) oder Plausible (EU-Server). Google reCAPTCHA → hCaptcha (EU) oder Friendly Captcha. Google Maps → OpenStreetMap. YouTube-Einbettung → Plugin „WP YouTube Lyte" lädt erst nach Klick. CDN: Cloudflare → BunnyCDN (EU) oder KeyCDN.
✓ So prüfen Sie, ob es funktioniert: Im Inkognito-Modus laden, F12 → Netzwerk → alle Anfragen auflisten → unter „Domain" auf Server außerhalb EU prüfen. Nach Umstellung sollte hier keine US-Domain mehr unaufgefordert geladen werden.
16 Drittanbieter-Server innerhalb der EU/des EWR.
Aufgerufene URLs:
https://cdn.shopify.com/extensions/01a1a718-384c-7f7e-b1fd-368042f5de6b/orbe-geolocation-512/assets/md-app-modal.min.css
https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/loader.init-shop-cart-sync.de.esm.js
https://cdn.shopify.com/storefront/standard-actions.js
https://cdn.shopify.com/s/files/1/0357/6833/6519/files/swopper-gleiter-schwarz-gravur.jpg?v=1667323763
https://cdn.shopify.com/extensions/01a18372-86d7-70ce-9a30-6e144651d0a7/agentic-ai-search-discovery-92/assets/vision-search.min.js
https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/client.init-shop-cart-sync_CIil05Dh.de.esm.js
https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/chunk.window_CAbVMZox.esm.js
https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/chunk.init_CNFr0A29.esm.js
https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/chunk.document_DMcRsBXN.esm.js
https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/chunk.networkErrorMessages_Du380vAr.esm.js
https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/chunk.register_BoetXJ5o.esm.js
https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/chunk.defineInitFunction_CIjOjzsO.esm.js
https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/chunk.casing_U_9x-Om3.esm.js
https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/chunk.utils_K8y2k-BJ.esm.js
https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/chunk.useUserRecognitionSignal_Be-LX1VX.esm.js
https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/chunk.storage_DQF5v-OM.esm.js
https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/client.shop-cart-sync_BDC2DLit.de.esm.js
https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/chunk.v4_C3N_0s0v.esm.js
https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/chunk.hooks_NQw5b9qv.esm.js
https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/chunk.validators_09U1U9sZ.esm.js
... und 23 weitere Anfrage(n)
Aufgerufene URLs:
https://analytics.tiktok.com/i18n/pixel/events.js?sdkid=D2MNRGJC77U7BITDITQ0&lib=ttq
https://analytics.tiktok.com/i18n/pixel/static/main.MWJhZThiYmZhMQ.js
https://analytics.tiktok.com/i18n/pixel/static/identify_3fd9fe73.js
https://analytics.tiktok.com/api/v2/monitor
https://analytics.tiktok.com/api/v2/pixel
https://analytics.tiktok.com/api/v2/pixel/act
... und 11 weitere Anfrage(n)
Aufgerufene URLs:
https://api.visionai.link/search/api/shops/00cd3f0a-b9bb-45c8-9f3a-58f3044a8f93/sales_channels/default/config
https://api.visionai.link/search/api/shops/00cd3f0a-b9bb-45c8-9f3a-58f3044a8f93/sales_channels/default/products/search?language=de&price_ctx=DE¤cy=EUR&shop_system=shopify
https://api.visionai.link/search/api/shops/00cd3f0a-b9bb-45c8-9f3a-58f3044a8f93/sales_channels/default/translations
... und 3 weitere Anfrage(n)
Aufgerufene URLs:
https://otlp-http-production.shopifysvc.com/v1/metrics
... und 3 weitere Anfrage(n)
Aufgerufene URLs:
https://region1.google-analytics.com/g/collect?v=2&tid=G-WB4MM6TJ3D>m=45je6b31v874832570za20ozb71724410zd71724410xf1&_p=1793840799852&gcs=G100&gcd=13p3pPp2p5l1&npa=1&dma_cps=-&dma=1&gdid=dMTZkMj.dN2
https://region1.google-analytics.com/g/collect?v=2&tid=G-WB4MM6TJ3D>m=45je6b31v874832570z871724410za20gzb71724410zd71724410xf1&_p=1793840799852&gcs=G100&gcd=13p3pPp2p5l1&npa=1&dma_cps=-&dma=1&gdid=d
https://region1.google-analytics.com/measurement/conversion?random=1793840800954&cv=11&tid=G-WB4MM6TJ3D&fst=1793840800954&fmt=8&en=Scroll%20%25%2075>m=45je6b31v874832570z871724410za20gzb71724410zd71
... und 1 weitere Anfrage(n)
Aufgerufene URLs:
https://ad.ad-srv.net/retarget?a=88837&version=1
https://ad.ad-srv.net/retarget?a=88837&version=1&redirected=1
https://ad.ad-srv.net/dsp/retargeting/di832uru0rci/?gdpr=&gdpr_consent=
https://ad.ad-srv.net/dsp/retargeting/di832uru0rci/?gdpr=&gdpr_consent=&dspRetargetingMarkersetRedirected=1&
Aufgerufene URLs:
https://www.googletagmanager.com/gtm.js?id=GTM-5S3VW9
https://www.googletagmanager.com/gtag/js?id=G-WB4MM6TJ3D&cx=c>m=4e6b31
https://www.googletagmanager.com/gtag/js?id=DC-12141533&cx=c>m=4e6b31
Aufgerufene URLs:
https://bat.bing.net/actionp/0?ti=134618422&Ver=2&mid=a8e7d18e-90e7-4125-8ac9-63853a7a7cd4&bo=1&evt=consent&src=default&cdb=AQAQ&asc=D
https://bat.bing.net/actionp/0?ti=134618422&Ver=2&mid=a8e7d18e-90e7-4125-8ac9-63853a7a7cd4&bo=2&evt=consent&src=default&cdb=AQAQ&asc=D
https://bat.bing.net/action/0?ti=134618422&Ver=2&mid=a8e7d18e-90e7-4125-8ac9-63853a7a7cd4&bo=3&pi=918639831&lg=en-US&sw=800&sh=600&sc=24&nwd=1&tl=Ergonomische%20B%C3%BCrost%C3%BChle%20von%20Aeris&p=ht
Aufgerufene URLs:
https://pagead2.googlesyndication.com/ccm/collect?rcb=19&frm=0&apvc=1&ae=g&en=page_view&dl=https%3A%2F%2Fwww.aeris.de&scrsrc=www.googletagmanager.com&rnd=855131166.1793840801&navt=n&npa=1&ep.ads_data_
https://pagead2.googlesyndication.com/ccm/collect?rcb=12&frm=0&apvc=0&tid=AW-455637472&en=page_view&dl=https%3A%2F%2Fwww.aeris.de&scrsrc=www.googletagmanager.com&rnd=855131166.1793840801&navt=n&npa=1&
https://pagead2.googlesyndication.com/ccm/collect?rcb=12&frm=0&apvc=0&tid=DC-12141533&en=page_view&dl=https%3A%2F%2Fwww.aeris.de&scrsrc=www.googletagmanager.com&rnd=855131166.1793840801&navt=n&npa=1&g
Aufgerufene URLs:
https://cdn.jsdelivr.net/npm/swiper@8/swiper-bundle.min.js
https://cdn.jsdelivr.net/npm/alpinejs@3.13.3/dist/cdn.min.js
Aufgerufene URLs:
https://bat.bing.com/bat.js
https://bat.bing.com/p/action/134618422.js
Aufgerufene URLs:
https://interfaces.zapier.com/assets/web-components/zapier-interfaces/zapier-interfaces.esm.js
https://interfaces.zapier.com/assets/web-components/zapier-interfaces/p-18b43768.js
Aufgerufene URLs:
https://forms.shopifyapps.com/api/v2/form_instances?shopify_domain=aeris-de.myshopify.com
... und 1 weitere Anfrage(n)
Aufgerufene URLs:
https://trc.taboola.com/1726221/trc/3/json?tim=1793840800500&data=%7B%22id%22%3A950%2C%22ii%22%3A%22%2F%22%2C%22it%22%3A%22video%22%2C%22sd%22%3Anull%2C%22ui%22%3Anull%2C%22vi%22%3A1793840800496%2C%22
https://trc.taboola.com/1726221/log/3/unip?it=GTM&en=view_content&tim=1793840800503&vi=1793840800496&ri=b930253a177838ecfcc18c9461d224ab&ref=null&cv=20261101-3-RELEASE&item-url=https%3A%2F%2Fwww.aeris
Aufgerufene URLs:
https://px.ads.linkedin.com/collect?v=2&fmt=js&pid=1064577&time=1793840800495&pageLoadId=0019c1fa-afdd-44ba-b0c5-14eca80afe33&url=https%3A%2F%2Fwww.aeris.de%2F&tm=gtmv2
https://px.ads.linkedin.com/wa/?medium=fetch&fmt=g
Aufgerufene URLs:
https://tm714.ad-srv.net/tm/a/container/eval/cfb7b9a7e9.js?sid=mt7uing03odl0mkb28ac3ug41q&rnd=76283522¯oData[transactionId]=¯oData[searchTerm]=¯oData[products]=¯oData[productId]=empty&
https://tm714.ad-srv.net/tm/a/container/tags/iframe/cfb7b9a7e9.html?sid=mt7uing03odl0mkb28ac3ug41q
Aufgerufene URLs:
https://qab.hextom.com/qab_get_bars?shop=aeris-de.myshopify.com
https://qab.hextom.com/qab_record_render?shop=aeris-de.myshopify.com
Aufgerufene URLs:
https://code.jquery.com/jquery-3.4.1.min.js
Aufgerufene URLs:
https://cdnjs.cloudflare.com/ajax/libs/shopify-cartjs/0.4.3/rivets-cart.min.js
Aufgerufene URLs:
https://snap.licdn.com/li.lms-analytics/insight.min.js
Aufgerufene URLs:
https://cdn.taboola.com/libtrc/unip/1726221/tfa.js
Aufgerufene URLs:
https://aeris-de.myshopify.com/cdn/shop/files/pandectes-reopen-logo.png
Aufgerufene URLs:
https://px4.ads.linkedin.com/collect?v=2&fmt=js&pid=1064577&time=1793840800495&pageLoadId=0019c1fa-afdd-44ba-b0c5-14eca80afe33&url=https%3A%2F%2Fwww.aeris.de%2F&tm=gtmv2&e_ipv6=AQJ9HOAJbj7yAQAAAaGpPmN
Aufgerufene URLs:
https://dr4qe3ddw9y32.cloudfront.net/awin-shopify-integration-code.js?aid=126403&v=shopifyApp_5.5.0&ts=1790772833070&shop=aeris-de.myshopify.com
Aufgerufene URLs:
https://analytics-ipv6.tiktokw.us/ipv6/enrich_ipv6
Aufgerufene URLs:
https://cdn.hextom.com/js/quickannouncementbar.js?shop=aeris-de.myshopify.com
Aufgerufene URLs:
https://tm.ad-srv.net/tm/a/container/init/cfb7b9a7e9.js?ntmData=ntmData7108369710807&rnd=80628016
Aufgerufene URLs:
https://insight.adsrvr.org/track/pxl/?adv=apca4a4&ct=0:4q1bqmx&fmt=3&gdpr=&gdpr_consent=
Aufgerufene URLs:
https://x.bidswitch.net/sync?dsp_id=305&user_id=9739c697789f0264&expires=90&gdpr=&gdpr_consent=
Aufgerufene URLs:
https://trc-events.taboola.com/1726221/log/3/unip?en=pre_d_eng_tb&tos=4572&scd=0&ssd=1&est=1793840800499&ver=36&isls=true&src=i&invt=4500&msa=8364&rv=1&tim=1793840805071&vi=1793840800496&ri=b930253a17
Aufgerufene URLs:
https://extensions.shopifycdn.com/shopifycloud/checkout-web/assets/c1/polyfills-entry-modern.qLDcQEZF.worker.js
3 bekannte(r) Tracker erkannt! Diese verfolgen Besucher über verschiedene Websites.
Tracker (Google Analytics, Facebook Pixel, …) erfassen Besucher und verfolgen sie über mehrere Websites. Nach § 25 TDDDG und Art. 6 Abs. 1 DSGVO erforderlich: ausdrückliche Einwilligung VOR dem Laden des Trackers. „Weiter scrollen = Zustimmung" ist NICHT zulässig.
WordPress-Plugin: Consent-Plugins, die Tracker korrekt blockieren bis zur Einwilligung: „Complianz" (kostenlos, sehr gut), „Real Cookie Banner", „Borlabs Cookie" (kostenpflichtig, am gründlichsten). Prinzip nach Einrichtung: Tracker-Snippet (z.B. GA-Script) NICHT direkt im Theme einbauen, sondern dem Consent-Plugin übergeben, das schaltet sie erst nach „Zustimmen" frei. Datenschutzfreundliche Tracker-Alternativen: Matomo (Cookieless-Modus → braucht u.U. kein Consent), Plausible (EU, anonym, kein Consent nötig laut Anbieter — Rechtsberatung empfohlen).
✓ So prüfen Sie, ob es funktioniert: Inkognito-Browser, Seite laden — VOR „Zustimmen": F12 → Netzwerk → keine Anfragen an google-analytics.com, facebook.com/tr usw. NACH „Zustimmen" dann ja.
Shopify (Content): cdn.shopify.com
Volentio JSD (Content): cdn.jsdelivr.net
Microsoft (Advertising): bat.bing.com
1 von 36 externen Ressource(n) nutzen Integritätsprüfung (SRI).
Nur ein Teil Ihrer externen Ressourcen (1 von 36) ist mit SRI gesichert. Ergänzen Sie integrity-Attribute auch bei den restlichen.
WordPress-Plugin: Vorgehen: Quelltext der Seite ansehen → alle <script src="https://…"> und <link href="https://…"> ohne integrity-Attribut → unter https://www.srihash.org/ Hash erzeugen → integrity="sha384-…" crossorigin="anonymous" ergänzen. Plugin „WP-SRI" kann das für viele Fälle automatisieren.
✓ So prüfen Sie, ob es funktioniert: F12 → Konsole bei Seitenladung: keine „Failed to find a valid digest"-Meldungen. Quelltext: alle externen <script>/<link> haben integrity-Attribut.
CAA-Einträge vorhanden: pki.goog, ssl.com, digicert.com, globalsign.com, letsencrypt.org — nur bestimmte Zertifizierungsstellen dürfen Zertifikate ausstellen.
IPv6-Unterstützung vorhanden (AAAA-Einträge).
Kein SPF-Eintrag. E-Mails können im Namen dieser Domain gefälscht werden.
SPF (Sender Policy Framework) legt im DNS fest, welche Server E-Mails im Namen Ihrer Domain versenden dürfen. Ohne SPF kann jeder Phisher E-Mails so aussehen lassen, als kämen sie von Ihnen — und Empfänger werden eher reinfallen.
WordPress-Plugin: DNS-Sache, nicht WordPress. Im DNS-Panel einen TXT-Eintrag anlegen. Beispiele: Wenn Sie KEINE E-Mails versenden: v=spf1 -all (alle Versender ablehnen). Wenn nur Ihr Hoster versendet (z.B. All-Inkl): v=spf1 a mx ~all. Wenn Google Workspace: v=spf1 include:_spf.google.com ~all. Wenn Microsoft 365: v=spf1 include:spf.protection.outlook.com -all.
✓ So prüfen Sie, ob es funktioniert: dig TXT ihre-domain.de | grep spf — oder online https://www.kitterman.com/spf/validate.html.
Kein DMARC-Eintrag. Die Domain ist anfällig für E-Mail-Phishing.
DMARC kombiniert SPF und DKIM zu einer expliziten Anweisung an empfangende Mail-Server: „Was tun, wenn E-Mails behaupten von uns zu kommen, aber SPF/DKIM scheitert?" Ohne DMARC entscheidet jeder Mail-Server selbst — meist großzügig. Mit DMARC=reject verhindern Sie wirksam Phishing in Ihrem Namen.
WordPress-Plugin: DNS-Sache. TXT-Eintrag bei Subdomain _dmarc.ihre-domain.de. Empfohlene Stufen: Beobachten erst: v=DMARC1; p=none; rua=mailto:dmarc-reports@ihre-domain.de — mehrere Wochen Berichte ansehen. Dann verschärfen: v=DMARC1; p=quarantine; rua=… — verdächtige Mails landen im Spam. Final: v=DMARC1; p=reject; rua=… — werden ganz abgewiesen.
✓ So prüfen Sie, ob es funktioniert: dig TXT _dmarc.ihre-domain.de — oder online https://dmarcian.com/dmarc-inspector/.
Keine security.txt-Datei gefunden (RFC 9116). Sicherheitsforscher wissen nicht, wie sie Schwachstellen melden können.
Eine security.txt (RFC 9116) sagt Sicherheitsforschern, wie sie Schwachstellen verantwortungsvoll an Sie melden können. Ohne diese Datei landen Hinweise vielleicht im Spam oder werden gar nicht erst geschickt. Eine reine Textdatei am korrekten Pfad genügt.
Datei: /.well-known/security.txt (Ordner anlegen, falls noch nicht vorhanden)
Contact: mailto:security@ihre-domain.de
Expires: 2027-12-31T23:59:59.000Z
Preferred-Languages: de, en
Canonical: https://ihre-domain.de/.well-known/security.txt⚠ „security@ihre-domain.de" durch Ihre tatsächliche Sicherheitskontakt-Adresse ersetzen (oder eine generische wie info@). „Expires" muss ein zukünftiges Datum sein und sollte regelmäßig erneuert werden. Datei ist eine simple .txt-Datei, kein PHP.
Datei: Datei security.txt im Ordner /.well-known/ unter Ihrem WordPress-Root
Contact: mailto:security@ihre-domain.de
Expires: 2027-12-31T23:59:59.000Z
Preferred-Languages: de, en
Canonical: https://ihre-domain.de/.well-known/security.txt⚠ Per FTP/SFTP einen Ordner ".well-known" im WordPress-Root anlegen (der Punkt am Anfang ist wichtig — bei manchen FTP-Programmen muss man „versteckte Dateien anzeigen" aktivieren), darin die Datei security.txt mit obigem Inhalt speichern. Falls WordPress die URL umleitet: in .htaccess ergänzen: RewriteRule ^\.well-known/ - [L]
WordPress-Plugin: Plugin „security.txt" (im Plugin-Verzeichnis suchen) ermöglicht die Konfiguration über das WordPress-Backend ohne FTP.
✓ So prüfen Sie, ob es funktioniert: https://ihre-domain.de/.well-known/security.txt im Browser aufrufen — Inhalt muss sichtbar sein (kein 404).
Network Error Logging (NEL) aktiv — Netzwerkfehler werden an einen externen Dienst gemeldet.
Network Error Logging (NEL) meldet Netzwerkfehler an einen externen Server. Wie bei externem Reporting: in Datenschutzerklärung erwähnen und prüfen, ob der Empfänger DSGVO-konform arbeitet.
Datei: .htaccess im Web-Root
<IfModule mod_headers.c>
Header always unset NEL
Header always unset Report-To
</IfModule>⚠ Wenn Sie NEL nicht aktiv brauchen: diese zwei Zeilen entfernen beide Reporting-Header. Wenn doch: in der Datenschutzerklärung dokumentieren.
Datei: .htaccess im WordPress-Root
<IfModule mod_headers.c>
Header always unset NEL
Header always unset Report-To
</IfModule>⚠ Falls die Header von einem Plugin gesetzt werden, das Plugin selbst konfigurieren.
✓ So prüfen Sie, ob es funktioniert: F12 → Netzwerk → erste Anfrage → Response Header: KEINE Einträge „nel" und „report-to" mehr (oder bewusst dokumentiert).
Daten werden an externen Dienst gemeldet: Report-To: a.nel.cloudflare.com
Ihre Website sendet Fehler- oder CSP-Berichte an einen externen Dienst (Report-To: a.nel.cloudflare.com). DSGVO-relevant: dabei werden mindestens IP-Adresse und URL übertragen. Prüfen Sie, ob (a) der Empfänger DSGVO-konform arbeitet, (b) die Übermittlung in Ihrer Datenschutzerklärung erwähnt ist, (c) ein Auftragsverarbeitungsvertrag (AVV) besteht.
WordPress-Plugin: Wenn Sie den Reporting-Empfänger nicht selbst eingerichtet haben, kommt er meist aus einem Plugin (z.B. Sentry, Rollbar, Datadog). Im Plugin-Konfigurationsbereich prüfen — entweder deaktivieren, durch EU-Anbieter ersetzen oder konsent-pflichtig stellen.
✓ So prüfen Sie, ob es funktioniert: Datenschutzerklärung enthält Eintrag zu Fehler-Reporting + AVV liegt vor. Im Inkognito-Modus: F12 → Netzwerk → keine ungewollten Berichts-Anfragen.
Cookie-Einwilligungssystem erkannt: Unbekannt.
Consent-Banner ist sichtbar für Besucher.
Tracker werden bereits beim Seitenaufruf geladen — möglicherweise VOR der Einwilligung.
Ihre Tracker werden geladen, bevor der Nutzer einwilligen kann („pre-consent loading"). Das ist ein häufiger Konfigurationsfehler bei Cookie-Plugins — Banner erscheint, aber zu spät: GA-Skript läuft schon. Verstößt gegen § 25 TDDDG.
WordPress-Plugin: Ursache liegt fast immer im Theme oder einem Tracking-Plugin, das den Tracker-Code direkt einbettet (z.B. „Google Analytics for WordPress" mit Auto-Insert). Lösung: 1) Tracking-Code AUS dem Theme/Plugin entfernen. 2) In Consent-Plugin (Complianz/Real Cookie Banner): Tracker als „Service" anlegen, Skript-Snippet dort hinterlegen — das Plugin lädt es erst bei Einwilligung. 3) ALTERNATIV: Plugin „Pys — PixelYourSite" + Consent-Verknüpfung. KEIN „GA bevor Consent als anonymisiert laden" — ist DSGVO-rechtlich nicht abschließend geklärt und riskant.
✓ So prüfen Sie, ob es funktioniert: Inkognito → F12 → Netzwerk (alles löschen, dann Aufzeichnung starten) → Seite laden, NICHT auf Banner klicken, 10 Sekunden warten → es darf KEINE Anfrage an google-analytics.com, googletagmanager.com, facebook.com/tr, doubleclick.net etc. erscheinen.
Datenschutzerklärung verlinkt: „Mehr erfahren" (/pages/datenschutz).
Impressum verlinkt: „Montag-Freitag" (https://www.aeris.de/pages/impressum).
Datenschutzerklärung ist erreichbar (HTTP 200).
Alle fehlenden Security-Header zu einem einzigen Block kombiniert. Diesen Block ans Ende Ihrer .htaccess hängen — fertig. 7 Header werden gesetzt.
Die Content-Security-Policy oben enthält bewusst 'unsafe-inline' sowohl für style-src als auch für script-src. Damit ist KEIN vollständiger XSS-Schutz möglich — das ist eine pragmatische Entscheidung, kein Bug.
Warum? Ein typisches WordPress-Setup (Theme + 5-15 Plugins) schreibt 10-50 verschiedene Inline-<script>-Blocks ins HTML: jQuery-Init, Slider-Initialisierung, Cookie-Banner, Tracking, GTM, Web Vitals, Lazy-Load, Speculation Rules usw. Wenn die strikte CSP script-src 'self' diese alle blockt, ist die Site optisch und funktional kaputt (Slider weiß, Cookie-Banner zerschossen, Plugins tot). Genau dieses Problem hatten Sie soeben mit Ihrer Slider-Seite.
Konsequenz fürs Scoring: Sites, die WordPress mit Plugins einsetzen, können in dieser App maximal ~75-85 Punkte in der CSP-Kategorie erreichen — das volle 100%-Rating ist erst möglich, wenn der inline-Code per Nonce oder Hash signiert wird (technisch anspruchsvoll, bricht bei jedem Theme/Plugin-Update).
Wege zum vollen XSS-Schutz (in steigender Komplexität):
Wer keinen dieser Wege geht, lebt mit 'unsafe-inline' — wie ca. 95% aller produktiven WordPress-Sites im Web. Die anderen CSP-Direktiven schützen weiterhin: default-src 'self' blockt externe Ressourcen, object-src 'none' verbietet Flash/Java, frame-ancestors 'self' verhindert Clickjacking, base-uri 'self' verhindert Base-Tag-Hijacking. Es ist kein Maximalschutz, aber realistischer Schutz für die WP-Praxis.
Bei Hetzner-Konsoleh-Webhosting (und vergleichbaren Shared-Hostern wie All-Inkl, IONOS, Strato, 1blu, …) wirft Apache einen HTTP 500 Internal Server Error, sobald Header always edit Set-Cookie … expr=… in der .htaccess steht. Der Apache-Error-Log nennt es so:
Can't parse envclause/expression: syntax error, unexpected T_OP_STR_EQ, expecting $end
Das ist keine WebForensik-Fehlfunktion und kein Tippfehler — der Shared-Hoster hat das mod_headers-expr=-Subset per AllowOverride-Limit gesperrt (aus Sicherheitsgründen, weil Header edit auch Cookies anderer Anwender manipulieren könnte).
☛ Für Hetzner-Konsoleh-Nutzer: nehmen Sie unten die Variante mit dem roten „Hetzner / Shared"-Badge. Sie besteht aus zwei Dateien (.htaccess + wp-config.php) statt einer, vermeidet aber den 500-Fehler garantiert. Die Cookie-Flags landen dort in der wp-config.php, nicht in der .htaccess.
Diesen Block ans Ende Ihrer .htaccess im Web-Root hängen — fertig.
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
Header always set Content-Security-Policy "default-src 'self'; img-src 'self' data: https:; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline'; font-src 'self' https: data:; object-src 'none'; frame-ancestors 'self'; base-uri 'self'; upgrade-insecure-requests"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
Header always set Permissions-Policy "camera=(), microphone=(), geolocation=(), payment=(), usb=(), accelerometer=(), gyroscope=(), magnetometer=(), interest-cohort=(), browsing-topics=()"
# Fehlende Cookie-Flags konditional ergänzen (nur wenn nicht schon gesetzt)
Header always edit Set-Cookie "^(.*)$" "$1; Secure" "expr=!(resp('Set-Cookie') -strmatch '*Secure*')"
Header always edit Set-Cookie "^(.*)$" "$1; HttpOnly" "expr=!(resp('Set-Cookie') -strmatch '*HttpOnly*')"
Header always edit Set-Cookie "^(.*)$" "$1; SameSite=Lax" "expr=!(resp('Set-Cookie') -strmatch '*SameSite*')"
</IfModule>
Diese Variante verhindert den 500 Internal Server Error auf Hetzner-Konsoleh und vergleichbaren Shared-Hostern (All-Inkl, IONOS, Strato, 1blu …): die .htaccess enthält NUR die Header-Direktiven (kein „Header edit"), die Cookie-Flags wandern in die wp-config.php. Zwei Dateien zu editieren statt einer, dafür garantiert lauffähig.
# BEGIN WebForensik Security
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
Header always set Content-Security-Policy "default-src 'self'; img-src 'self' data: https:; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline'; font-src 'self' https: data:; object-src 'none'; frame-ancestors 'self'; base-uri 'self'; upgrade-insecure-requests"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
Header always set Permissions-Policy "camera=(), microphone=(), geolocation=(), payment=(), usb=(), accelerometer=(), gyroscope=(), magnetometer=(), interest-cohort=(), browsing-topics=()"
</IfModule>
# END WebForensik Security
OBERHALB der Zeile „/* That's all, stop editing! */" einfügen. Vorher Backup von wp-config.php anlegen!
// === WebForensik: Cookie-Hardening (Hetzner-Konsoleh-tauglich) ===
// Bitte OBERHALB der Zeile "/* That's all, stop editing! */" einfügen.
// Wirkt auf PHP-Session- und WordPress-Login-Cookies.
// Plugin-eigene Cookies (z.B. WooCommerce, Cookie-Banner) müssen in den
// Plugin-Einstellungen separat auf "Secure" gestellt werden.
@ini_set('session.cookie_secure', '1');
@ini_set('session.cookie_httponly', '1');
@ini_set('session.cookie_samesite', 'Lax');
if (!defined('FORCE_SSL_ADMIN')) define('FORCE_SSL_ADMIN', true);
Diesen Block OBERHALB der Zeile „# BEGIN WordPress" einfügen, sonst überschreibt WP ihn bei Permalink-Änderungen.
# BEGIN WebForensik Security
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
Header always set Content-Security-Policy "default-src 'self'; img-src 'self' data: https:; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline'; font-src 'self' https: data:; object-src 'none'; frame-ancestors 'self'; base-uri 'self'; upgrade-insecure-requests"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
Header always set Permissions-Policy "camera=(), microphone=(), geolocation=(), payment=(), usb=(), accelerometer=(), gyroscope=(), magnetometer=(), interest-cohort=(), browsing-topics=()"
# Fehlende Cookie-Flags konditional ergänzen
Header always edit Set-Cookie "^(.*)$" "$1; Secure" "expr=!(resp('Set-Cookie') -strmatch '*Secure*')"
Header always edit Set-Cookie "^(.*)$" "$1; HttpOnly" "expr=!(resp('Set-Cookie') -strmatch '*HttpOnly*')"
Header always edit Set-Cookie "^(.*)$" "$1; SameSite=Lax" "expr=!(resp('Set-Cookie') -strmatch '*SameSite*')"
</IfModule>
# END WebForensik Security
Falls Ihr Hoster .htaccess-Änderungen nicht erlaubt: dieses PHP-Snippet ans Ende der functions.php Ihres CHILD-Themes hängen. Vorher Backup machen — NIE das Haupt-Theme bearbeiten, das wird bei Updates überschrieben.
add_action('send_headers', function () {
header("Strict-Transport-Security: max-age=31536000; includeSubDomains");
header("Content-Security-Policy: default-src 'self'; img-src 'self' data: https:; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline'; font-src 'self' https: data:; object-src 'none'; frame-ancestors 'self'; base-uri 'self'; upgrade-insecure-requests");
header("Referrer-Policy: strict-origin-when-cross-origin");
header("Permissions-Policy: camera=(), microphone=(), geolocation=(), payment=(), usb=(), accelerometer=(), gyroscope=(), magnetometer=(), interest-cohort=(), browsing-topics=()");
});
// Cookie-Flags für PHP-Session-Cookies — wirkt nur auf $_SESSION,
// NICHT auf von Plugins/Themes per setcookie() gesetzte Cookies.
// Für umfassende Cookie-Absicherung die .htaccess-Variante oben verwenden.
add_action('init', function () {
if (headers_sent()) return;
@ini_set('session.cookie_secure', '1');
@ini_set('session.cookie_httponly', '1');
@ini_set('session.cookie_samesite', 'Lax');
}, 1);
| Header | Wert |
|---|---|
| accept-ch | Sec-CH-Viewport-Width |
| alt-svc | h3=":443"; ma=86400 |
| cdn-cache-control | no-cache, no-store |
| cf-cache-status | DYNAMIC |
| cf-ray | a557f503dd620177-CDG |
| content-encoding | br |
| content-language | de-DE |
| content-length | 158597 |
| content-security-policy | block-all-mixed-content; frame-ancestors 'none'; upgrade-insecure-requests; |
| content-type | text/html; charset=utf-8 |
| date | Thu, 05 Nov 2026 01:06:39 GMT |
| etag | "sfr:computation:v2:0da5ada0d09ad603e99d91d860e1097178341a01d6e6a7401573fbfb1ae300aa:62b1a0a3e6f38515e1ba729bee211379" |
| link | <https://cdn.shopify.com>; rel="preconnect", <https://cdn.shopify.com>; rel="preconnect"; crossorigin, <https://cdn.jsdelivr.net>; rel="preconnect", <//www.aeris.de/cdn/shop/files/pandectes-rules.js?v=2891826403494317556>; as="script"; rel="preload", <//www.aeris.de/cdn/shop/t/582/assets/theme.css?v |
| nel | {"report_to":"cf-nel","success_fraction":0.01,"max_age":604800} |
| powered-by | Shopify |
| product-filtering-backend | bitset_roaring |
| report-to | {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=0D0h2Rr317G2GYaQ%2BJjsFurOdWpyME2thuNy6dysnudilrXqj0F1KMGt3TZ%2Fg%2FyDLxCyNe%2F9ScE3YMDrOj7v1vNm1JOpwyt8moB7qDxit1JsT1a2k0yiy%2FnfWoSRMebf9EqipW6P2JueTQ%3D%3D"}]} |
| server | cloudflare |
| server-timing | processing;dur=432, db;dur=309, render;dur=131, asn;desc="24940", edge;desc="CDG", country;desc="DE", theme;desc="163251913050", pageType;desc="index", servedBy;desc="xfsq", requestID;desc="5ee17360-3508-419b-abd0-2c11e21c24c6-1793840799", _y;desc="00000000-0000-0000-5000-000000000000", _s;desc="000 |
| set-cookie | _shopify_essential=:AaGpPl6AAAEA19lJfsBNYhwFmGP5GU7Veyi0ZD-qIsrQW2IGABL2U0NJK7IpP1OafxyUMS-qy4u1wKYw2M5bknaE4TM:; Max-Age=31536000; Path=/; HttpOnly; Secure; Priority=High; SameSite=Lax localization=DE; path=/; expires=Fri, 05 Nov 2027 01:06:39 GMT; SameSite=Lax cart_currency=EUR; path=/; expires=Th |
| shopify-complexity-score | 4310 |
| shopify-complexity-score-v2 | 431 |
| strict-transport-security | max-age=7889238 |
| vary | Accept accept-encoding |
| x-content-type-options | nosniff |
| x-dc | gcp-europe-west1,gcp-europe-west1,gcp-europe-west1 |
| x-download-options | noopen |
| x-frame-options | DENY |
| x-permitted-cross-domain-policies | none |
| x-request-id | 5ee17360-3508-419b-abd0-2c11e21c24c6-1793840799 |
| x-xss-protection | 1; mode=block |