Scan time: 2026-09-26 09:58:59
Overall Score
Compared with scan from 26.09.2026 09:58 (Score 55 → 64) · View full history
✓ Protections gained: cookies_summary, tracker_none
⚠ This website needs improvement regarding data protection.
GDPR Issues Detected (1):
⚠ Missing or unsafe Referrer-Policy — URLs containing personal data may be leaked to third parties.
Note: This automated analysis does not replace legal advice. For a complete GDPR assessment, consult a data protection officer.
↓ See detailed results for each category below.
The website uses an encrypted connection (HTTPS).
Latest encryption active (TLS 1.3 — TLSv1.3).
The security certificate is valid (expires 2027-01-28).
Strong encryption method (TLS_AES_256_GCM_SHA384, 256 bit).
No HSTS header set. Browsers are not forced to use the encrypted connection.
HSTS (HTTP Strict Transport Security) tells the browser: "Always use HTTPS for this domain — no matter what." This prevents attackers on the same WLAN from intercepting the first, unprotected request. Prerequisite: your site is already stable on HTTPS.
File: .htaccess in the web root
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
</IfModule>⚠ max-age=31536000 equals 1 year (in seconds). includeSubDomains also covers blog.your-domain.com, shop.your-domain.com etc. — only enable if ALL subdomains support HTTPS, otherwise they become unreachable.
File: .htaccess in the WordPress root
# BEGIN WebForensik HSTS
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
</IfModule>
# END WebForensik HSTS⚠ Insert ABOVE the "# BEGIN WordPress" line. Only enable once HTTPS has been stable for a few days — the header is intentionally hard to roll back (browsers remember the instruction).
File: functions.php of your CHILD theme (Appearance → Theme File Editor → functions.php)
add_action('send_headers', function () {
header('Strict-Transport-Security: max-age=31536000; includeSubDomains');
});⚠ NEVER edit the parent theme — changes are lost on update. Back up functions.php first!
✓ How to verify it works: DevTools (F12) → Network tab → reload page → click the first request → "Response Headers" — must contain "strict-transport-security: max-age=31536000…".
Content Security Policy present (via HTTP-Header).
Script sources are too broad (wildcard, http:, etc.) — practically no protection.
Your script-src is so broad (wildcard *, http:, …) that practically any code can be loaded — protection is effectively zero. You need to list allowed domains explicitly.
File: .htaccess in the 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' https://www.googletagmanager.com https://www.google-analytics.com; font-src 'self' https: data:; object-src 'none'; frame-ancestors 'self'; base-uri 'self'"
</IfModule>⚠ After "script-src 'self'" list only domains you actually need. Step-by-step approach: remove all wildcards, reload, F12 console shows blocked domain → add → repeat. The other directives (img-src data:, style-src 'unsafe-inline') are kept pragmatic so WordPress emoji, admin bar and plugin inline-styles don't break.
File: .htaccess in the 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' https://www.googletagmanager.com; font-src 'self' https: data:; object-src 'none'; frame-ancestors 'self'; base-uri 'self'"
</IfModule>⚠ Add domains after "script-src 'self'" as needed (space-separated, prefixed with https://). IMPORTANT: img-src data: and style-src 'unsafe-inline' MUST stay — without them WordPress emoji, admin-bar icons and plugin inline-styles will break.
✓ How to verify it works: F12 → Console. If something is blocked: "Refused to load the script ‘https://…’" — identify the URL, add its domain to script-src, reload.
Good base rule: only own content is allowed by default (default-src: self).
Referrer-Policy: no-referrer-when-downgrade (via HTTP-Header).
The setting "no-referrer-when-downgrade" shares too much URL information with other websites.
Your current Referrer-Policy reveals too much (e.g. "unsafe-url" or "no-referrer-when-downgrade"). Switch to a more privacy-friendly setting.
File: .htaccess in the web root
<IfModule mod_headers.c>
Header always set Referrer-Policy "strict-origin-when-cross-origin"
</IfModule>⚠ Replace the existing Referrer-Policy line.
File: .htaccess in the WordPress root
<IfModule mod_headers.c>
Header always set Referrer-Policy "strict-origin-when-cross-origin"
</IfModule>⚠ Replace the existing Referrer-Policy entry.
✓ How to verify it works: F12 → Network → Response Header — new value visible.
No MIME type protection (X-Content-Type-Options missing). Browsers may misinterpret files.
Without the "X-Content-Type-Options: nosniff" header the browser guesses file types from content — which attackers can exploit (e.g. a HTML file disguised as .jpg is executed as HTML). The fix is one single line.
File: .htaccess in the web root
<IfModule mod_headers.c>
Header always set X-Content-Type-Options "nosniff"
</IfModule>⚠ No side effects expected — considered a safe standard and best practice for years.
File: .htaccess in the WordPress root
<IfModule mod_headers.c>
Header always set X-Content-Type-Options "nosniff"
</IfModule>⚠ Safe to add alongside other Header set entries.
File: functions.php of your CHILD theme
add_action('send_headers', function () {
header('X-Content-Type-Options: nosniff');
});⚠ Back up functions.php before edits.
✓ How to verify it works: F12 → Network → Response Header: "x-content-type-options: nosniff".
Clickjacking protection active: X-Frame-Options = SAMEORIGIN.
Permissions-Policy is configured — access to sensitive device APIs is controlled.
1 first-party and 0 third-party cookie(s).
1 of 1 cookie(s) without SameSite protection — sent with requests from other websites.
Without "SameSite" cookies are sent on requests from foreign sites — the basis of CSRF attacks (a foreign page silently triggers actions in your name because the login cookie travels along). Set SameSite=Lax as a minimum.
File: .htaccess in the web root
<IfModule mod_headers.c>
Header always edit Set-Cookie "^(.*)$" "$1; SameSite=Lax" "expr=!(resp('Set-Cookie') -strmatch '*SameSite*')"
</IfModule>⚠ SameSite=Lax is a good default. Strict is safer but breaks external links (user clicks from Google to your site — cookies are NOT sent, login is lost). None allows cross-site but requires "; Secure".
File: wp-config.php (above "/* That’s all, stop editing! */")
@ini_set('session.cookie_samesite', 'Lax');
@ini_set('session.cookie_secure', '1');
@ini_set('session.cookie_httponly', '1');⚠ Sets SameSite/Secure/HttpOnly for PHP session cookies. WordPress login cookies have been SameSite=Lax since WP 6.2. Update older versions!
✓ How to verify it works: F12 → Application → Cookies → "SameSite" column should show "Lax" or "Strict" everywhere, not empty.
| Name | Domain | Encrypted | Server only | SameSite |
|---|---|---|---|---|
| session_token | .xvideos.com | Yes | Yes | None |
1 localStorage and 0 sessionStorage item(s) found.
| Name | Value |
|---|---|
| thumbloadstats_vthumbs | {"21":[{"s":2,"d":41}],"23":[{"s":2,"d":37}],"last":{"s":2,"v":[41,37]},"t":1791 |
67 request(s) to 6 different third-party servers.
6 third-party server(s) within the EU/EEA.
Requested URLs:
https://thumb-cdn77.xvideos-cdn.com/d34e05ca-e58e-4dd1-8133-17abf3558785/6/xv_17_t.avif
https://thumb-cdn77.xvideos-cdn.com/118f386e-fc57-4e01-9ce6-a154990478f8/6/xv_7_t.avif
https://thumb-cdn77.xvideos-cdn.com/75569898-a947-42ce-8932-56e6cf868287/6/xv_18_t.avif
https://thumb-cdn77.xvideos-cdn.com/72ddde8e-603c-4714-a23a-9f66de5c3f26/6/xv_20_t.avif
https://thumb-cdn77.xvideos-cdn.com/75934951-9fa6-4e83-80d8-4579ae756a83/6/xv_4_t.avif
https://thumb-cdn77.xvideos-cdn.com/741547df-88d8-4a09-80d7-1e869117b773/6/xv_23_t.avif
https://thumb-cdn77.xvideos-cdn.com/3e32fc05-90aa-483a-ae55-b49182af3053/6/xv_29_t.avif
https://thumb-cdn77.xvideos-cdn.com/671c7a8e-ab66-414e-8348-ff389c6b3a49/6/xv_3_t.avif
https://thumb-cdn77.xvideos-cdn.com/d25763b2-58d2-40c0-adf9-545f9d27b29f/6/xv_8_t.avif
https://thumb-cdn77.xvideos-cdn.com/18fd9c7e-24f5-4f94-a8b4-81f22a34ecd3/6/xv_21_t.avif
https://thumb-cdn77.xvideos-cdn.com/374b0f82-4fbd-474b-b0dc-f0ee2aa5e77c/6/xv_19_t.avif
https://thumb-cdn77.xvideos-cdn.com/fec79428-537f-406c-a680-d7e4f017b877/6/xv_22_t.avif
https://thumb-cdn77.xvideos-cdn.com/d53e54b2-f75f-4215-8d57-e55036fa4203/6/xv_25_t.avif
https://thumb-cdn77.xvideos-cdn.com/5f4e51cf-e92a-44fc-bf34-b948c465d25f/6/xv_19_t.avif
https://thumb-cdn77.xvideos-cdn.com/9f122db9-2316-44cd-b8ed-90f0a6d2ccc3/6/xv_28_t.avif
https://thumb-cdn77.xvideos-cdn.com/44387987-0c40-4dca-9ebd-255a3acb7dba/6/xv_2_t.avif
https://thumb-cdn77.xvideos-cdn.com/d65442e3-7091-4075-a5fe-63c2e8711288/6/xv_3_t.avif
https://thumb-cdn77.xvideos-cdn.com/11721a30-a4a2-4d06-a793-9163ad622df1/6/xv_27_t.avif
https://thumb-cdn77.xvideos-cdn.com/9601c1b3-b247-4731-a6a4-1a53881e3810/6/xv_29_t.avif
https://thumb-cdn77.xvideos-cdn.com/6b4c0f30-45f5-422a-bdc4-7ddde7b6f45f/6/xv_1_t.avif
... and 22 more request(s)
Requested URLs:
https://assets-o7.xvideos-cdn.com/v-f0b0402abe0/v3/css/default/main.css
https://assets-o7.xvideos-cdn.com/v-2f71f863585/v3/js/skins/min/default.header.static.js
https://assets-o7.xvideos-cdn.com/v-9a4f1a51a62/v3/js/skins/min/default.footer.static.js
https://assets-o7.xvideos-cdn.com/img/lightbox/lightbox-blank.gif
https://assets-o7.xvideos-cdn.com/v3/js/skins/min/require.static.js
https://assets-o7.xvideos-cdn.com/v3/js/libs/jquery.min.js
https://assets-o7.xvideos-cdn.com/v3/img/skins/default/logo/xvideos.black.svg
https://assets-o7.xvideos-cdn.com/v-1ef3f3eb5f7/v3/js/i18n/front/english.json
https://assets-o7.xvideos-cdn.com/v-f0b0402abe0/v3/img/flags/flat/flags-16.png
https://assets-o7.xvideos-cdn.com/v-02605211619/v3/fonts/skins/common/iconfont/iconfont.woff2
https://assets-o7.xvideos-cdn.com/v-c9b66cd7a78/v3/js/skins/min/default.js
https://assets-o7.xvideos-cdn.com/v3/img/skins/default/xv-inline-loader.gif
https://assets-o7.xvideos-cdn.com/v3/img/skins/default/logo/xv.white.svg
https://assets-o7.xvideos-cdn.com/v-c9b66cd7a78/v3/js/jquery.js
https://assets-o7.xvideos-cdn.com/v-c9b66cd7a78/v3/js/libs/hls-1.2.5.min.js
Requested URLs:
https://thumbs-gcore.xvideos-cdn.com/5ae53165-6d5f-4029-b70b-b5dd3dc45aa2/6/xv_27_t.avif
https://thumbs-gcore.xvideos-cdn.com/d0e327f4-c07b-46ca-a24c-e129604b6a15/6/xv_15_t.avif
https://thumbs-gcore.xvideos-cdn.com/60b8e3f1-e66d-42f5-abe5-ce2907efebde/6/xv_16_t.avif
https://thumbs-gcore.xvideos-cdn.com/db5482fa-9679-4372-b9b8-114e2cc4f93c/6/xv_20_t.avif
https://thumbs-gcore.xvideos-cdn.com/4ca3b4fe-4d70-4249-bafa-c535170c3305/6/xv_8_t.avif
https://thumbs-gcore.xvideos-cdn.com/99de0119-9d75-4aea-968e-e870c746530c/6/xv_3_t.avif
Requested URLs:
https://s.pemsrv.com/v1/api.php
https://s.pemsrv.com/cimp.php?t=api&data=H4sIAAAAAAAAA11RUW7DMAi9yi5QCzBgu9/dCaYeIHGyLR9tpqaqOonDD3udtE3PtgQG3gMISHdQdqRPEPeS96KWcmANFJDZDs9HY7T7bZnmdQt1PVkBZCXTqDkWy8BZoklJwolMIFsmAgEwjKQEHmAMRgYOVga
Requested URLs:
https://a.pemsrv.com/ad-provider.js
Requested URLs:
https://z6v2p9a8.bkcdn.net/library/901462/c1a0eb9046af3c28d3b605941e299624ccd040bd.webp
No known trackers detected.
0 of 9 external resource(s) use integrity verification (SRI).
Only some of your external resources (0 of 9) are protected by SRI. Add integrity attributes to the remaining ones too.
WordPress plugin: Approach: view page source → all <script src="https://…"> and <link href="https://…"> without integrity attribute → generate hash at https://www.srihash.org/ → add integrity="sha384-…" crossorigin="anonymous". Plugin "WP-SRI" automates many cases.
✓ How to verify it works: F12 → Console on page load: no "Failed to find a valid digest" messages. Source: all external <script>/<link> have an integrity attribute.
No external resources use integrity verification. Tampered files would not be detected.
SRI (Subresource Integrity) is a checksum in HTML that defines what an externally loaded file MUST look like. If someone tampers with the external file (e.g. a CDN gets compromised), the browser refuses to load it. You add the "integrity" attribute on the script/link tag.
WordPress plugin: In WordPress you can rarely add SRI hashes manually (scripts are queued via wp_enqueue_script()). Plugin "WP-SRI" (in the plugin directory) adds integrity hashes automatically for external scripts/styles. For statically embedded resources in your theme: generate the hash at https://www.srihash.org/, add integrity="sha384-…" and crossorigin="anonymous" on the <script>/<link> tag.
✓ How to verify it works: F12 → Network → requests with status 200 from CDN domains (cdn.jsdelivr.net, cdnjs.cloudflare.com etc.) → in HTML source the tag must contain "integrity=\"sha384-…\" crossorigin=\"anonymous\"".
No CAA records. Any certificate authority could issue a certificate for this domain.
CAA records (Certification Authority Authorization) define in DNS which Certificate Authorities are allowed to issue certificates for your domain. Without a CAA record an attacker could request a fraudulent certificate for your domain at any CA. CAA is pure DNS configuration — set in your registrar/DNS-panel, NOT in WordPress.
Find your host in the table, copy the values to your DNS panel. For multi-CA hosts: one separate CAA record per CA (all with tag issue, flag 0, name @). Additionally recommended: an iodef record with a contact email for abuse reports.
| # | Host | CA(s) used | CAA value(s) — tag issue |
|---|---|---|---|
| 1 | Hetzner Webhosting (basic certificate, free in package) | DigiCert (programme „Encryption Everywhere") | digicert.com |
| 1 | Hetzner Webhosting (Let’s Encrypt, free) | Let’s Encrypt (ISRG) | letsencrypt.org |
| 2 | All-Inkl | Let’s Encrypt + Sectigo (Pro) | letsencrypt.orgsectigo.com |
| 3 | IONOS (1&1) | DigiCert (GeoTrust) + Let’s Encrypt | digicert.comletsencrypt.org |
| 4 | STRATO | Sectigo + Let’s Encrypt | sectigo.comletsencrypt.org |
| 5 | Cloudflare (Universal SSL) | Google Trust Services + DigiCert + Let’s Encrypt | pki.googdigicert.comletsencrypt.org |
| 6 | AWS (ACM / CloudFront) | Amazon Trust Services | amazon.comamazontrust.comawstrust.comamazonaws.com |
| 7 | Mittwald | Let’s Encrypt + Sectigo | letsencrypt.orgsectigo.com |
| 8 | Webgo | Let’s Encrypt + Sectigo | letsencrypt.orgsectigo.com |
| 9 | raidboxes (Managed WordPress) | Let’s Encrypt | letsencrypt.org |
| 10 | Host Europe / DomainFactory | Sectigo + Let’s Encrypt | sectigo.comletsencrypt.org |
Name Type Flag Tag Value
@ CAA 0 issue "digicert.com"
@ CAA 0 issue "letsencrypt.org"
@ CAA 0 iodef "mailto:security@your-domain.com"
The iodef line (last line) is optional but recommended: CAs report abuse attempts to that address. For subdomains (e.g. shop.your-domain.com) create separate records with the subdomain name instead of @ — modern CAs check parent CAA automatically though.
If your host is not on the list: open your current certificate in the browser (padlock → certificate → issuer). The CA name is shown there (e.g. "Sectigo RSA Domain Validation Secure Server CA" → value sectigo.com). Add that as a CAA record, done.
WordPress plugin: CAA records are NOT created in WordPress but in your domain registrar / DNS provider panel (e.g. Hetzner-Robot, IONOS Domains, Cloudflare Dashboard, INWX, etc.). Common label: "CAA record" or under "TXT records" with type selector "CAA". One separate record per CA.
✓ How to verify it works: On https://www.ssllabs.com/ssltest/analyze.html?d=your-domain.com → "DNS CAA" section → all your CAs should be listed. Or via dig: dig CAA your-domain.com.
3 nameservers present — good redundancy.
No IPv6 support (no AAAA record).
Your domain has no IPv6 address (AAAA record). Over 40% of users (especially mobile) reach the internet via IPv6 — they must take the slower IPv4 gateway detour.
WordPress plugin: Pure DNS + server matter. Step 1: check if your host has an IPv6 address for you (hosting panel or support ticket). Step 2: in the DNS panel create an AAAA record pointing to that IPv6. Step 3: test.
✓ How to verify it works: dig AAAA your-domain.com — or online https://ipv6-test.com/validate.php?url=your-domain.com.
SPF record present: v=spf1 mx ip4:79.127.140.143 ip4:79.127.140.144 ip4:79.127.140.145 include:_spf.google.com include:sendgrid.net include: — protects against email spoofing.
No DMARC record. The domain is vulnerable to email phishing.
DMARC combines SPF and DKIM into an explicit instruction for receiving mail servers: "What to do if emails claim to come from us but SPF/DKIM fail?" Without DMARC each server decides — usually generously. With DMARC=reject you effectively prevent phishing in your name.
WordPress plugin: DNS matter. TXT record at subdomain _dmarc.your-domain.com. Recommended stages: Observe first: v=DMARC1; p=none; rua=mailto:dmarc-reports@your-domain.com — review reports for weeks. Then tighten: v=DMARC1; p=quarantine; rua=… — suspicious mails go to spam. Final: v=DMARC1; p=reject; rua=… — they’re refused outright.
✓ How to verify it works: dig TXT _dmarc.your-domain.com — or online https://dmarcian.com/dmarc-inspector/.
security.txt found: https://www.xvideos.com/.well-known/security.txt
Contact field present (required) — security researchers can report vulnerabilities.
Expires field present (required).
No external reporting endpoints detected.
Cookie consent system detected: TCF API (__tcfapi).
TCF-compliant consent system (Transparency & Consent Framework) — IAB standard.
Consent system detected, but banner does not appear to be visible.
Your consent system is wired up but the banner doesn’t appear visibly — perhaps hidden by another plugin or custom CSS. Risk: without a visible banner, no consent is given.
WordPress plugin: Approach: 1) clear browser cache + cookies, use incognito. 2) In the consent plugin: check display conditions (e.g. "only EU visitors" — and you’re testing from a non-EU server). 3) F12 → Console for red errors from consent scripts. 4) Inspector → search DOM for "cookie", "consent" — element present but display:none? z-index too low? 5) Uninstall conflicting cookie-notice plugins.
✓ How to verify it works: Incognito tab, load page, wait 5 seconds — banner visible centered/bottom, doesn’t fully block main content, is clickable.
Privacy policy linked: "Privacy policy" (https://info.xvideos.net/legal/privacy).
Legal notice linked: "Privacy notice" (https://info.xvideos.net/legal/privacynotice).
Privacy policy page is accessible (HTTP 200).
All missing security headers combined into one block. Append this block to the end of your .htaccess — done. 5 headers will be set.
The Content-Security-Policy above deliberately includes 'unsafe-inline' for both style-src and script-src. This does NOT provide full XSS protection — it's a pragmatic trade-off, not a bug.
Why? A typical WordPress setup (theme + 5-15 plugins) emits 10-50 different inline <script> blocks into the HTML: jQuery init, slider init, cookie banner, tracking, GTM, web vitals, lazy-load, speculation rules and so on. A strict script-src 'self' blocks them all — the site becomes visually and functionally broken (blank slider, broken cookie banner, dead plugins).
Consequence for scoring: Sites running WordPress with plugins can score at most ~75-85 points in the CSP category in this app — the full 100% rating is only achievable when inline code is signed via nonce or hash (technically demanding, breaks on every theme/plugin update).
Paths to full XSS protection (in increasing complexity):
Anyone who doesn't take one of these paths lives with 'unsafe-inline' — like about 95% of all production WordPress sites on the web. The other CSP directives still protect: default-src 'self' blocks external resources, object-src 'none' bans Flash/Java, frame-ancestors 'self' prevents clickjacking, base-uri 'self' prevents base-tag hijacking. Not maximum protection, but realistic protection for WP reality.
On Hetzner-Konsoleh webhosting (and comparable shared hosts like All-Inkl, IONOS, Strato, 1blu, …), Apache throws a 500 Internal Server Error as soon as Header always edit Set-Cookie … expr=… appears in .htaccess. The Apache error log says:
Can't parse envclause/expression: syntax error, unexpected T_OP_STR_EQ, expecting $end
This is not a WebForensik bug and not a typo — the shared host has blocked the mod_headers expr= subset via AllowOverride limits (for security, because Header edit could also manipulate cookies of other tenants).
☛ For Hetzner-Konsoleh users: use the variant below marked with the red "Hetzner / Shared" badge. It consists of two files (.htaccess + wp-config.php) instead of one, but avoids the 500 error reliably. Cookie flags go into wp-config.php instead of .htaccess.
Append this block to the end of your .htaccess in the web root — done.
<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 X-Content-Type-Options "nosniff"
# Fehlende Cookie-Flags konditional ergänzen (nur wenn nicht schon gesetzt)
Header always edit Set-Cookie "^(.*)$" "$1; SameSite=Lax" "expr=!(resp('Set-Cookie') -strmatch '*SameSite*')"
</IfModule>
This variant avoids the 500 Internal Server Error on Hetzner-Konsoleh and similar shared hosts (All-Inkl, IONOS, Strato, 1blu …): the .htaccess only contains the header directives (no "Header edit"), cookie flags move into wp-config.php. Two files to edit instead of one, but guaranteed to run.
# 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 X-Content-Type-Options "nosniff"
</IfModule>
# END WebForensik Security
Insert ABOVE the line "/* That's all, stop editing! */". Back up wp-config.php first!
// === 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_samesite', 'Lax');
Insert this block ABOVE the "# BEGIN WordPress" line, otherwise WP overwrites it on permalink changes.
# 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 X-Content-Type-Options "nosniff"
# Fehlende Cookie-Flags konditional ergänzen
Header always edit Set-Cookie "^(.*)$" "$1; SameSite=Lax" "expr=!(resp('Set-Cookie') -strmatch '*SameSite*')"
</IfModule>
# END WebForensik Security
If your host disallows .htaccess changes: append this PHP snippet to the end of your CHILD theme's functions.php. Back up first — NEVER edit the parent theme, it gets overwritten on updates.
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("X-Content-Type-Options: nosniff");
});
// 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_samesite', 'Lax');
}, 1);
| Header | Value |
|---|---|
| accept-ch | Viewport-Width, Width, Device-Memory, Sec-CH-UA, Sec-CH-UA-Full-Version-List, Sec-CH-UA-Arch, Sec-CH-UA-Full-Version, Sec-CH-UA-Mobile, Sec-CH-UA-Platform, Sec-CH-UA-Platform-Version, Sec-CH-UA-Model, Sec-CH-UA-Bitness |
| content-encoding | gzip |
| content-length | 31654 |
| content-security-policy | default-src 'self' data: 'unsafe-inline' 'unsafe-eval' blob: yoti: *.xvideos.com *.xnxx.com *.red-cdn.com *.gold-cdn.com *.xvideos-cdn.com *.xnxx-cdn.com *.others-cdn.com 1868565294.rsc.cdn77.org static.cloudflareinsights.com www.google.com www.gstatic.com fonts.gstatic.com global.frcapi.com *.googl |
| content-type | text/html; charset=utf-8 |
| cross-origin-opener-policy | same-origin-allow-popups |
| date | Sat, 26 Sep 2026 07:58:55 GMT |
| p3p | policyref="/p3p.xml", CP="NOI CURa ADMa DEVa TAIa OUR BUS IND UNI COM NAV INT" |
| permissions-policy | ch-ua-model=(self "https://s.orbsrv.com" "https://s.pemsrv.com" "https://s.jpwrwxvm.com"), ch-ua-platform-version=(self "https://s.orbsrv.com" "https://s.pemsrv.com" "https://s.jpwrwxvm.com") |
| referrer-policy | no-referrer-when-downgrade |
| report-to | {"group": "csp-endpoint", "max_age": 10886400, "endpoints": [ { "url": "https://www.xvideos.com/csp-reports" } ] } |
| server | nginx |
| set-cookie | session_token=2293dbf1cf42e660WXP7pzOFiiiGiFqVcsPqfrueOBUhwwmVrelgUVZnPTIUDgbiEC4vCnFjYhPGf1-u61mvnDnHYM1UZaxZgz_Pay2NxT5ZP_k3z77VL66c0swLmhBsl_d-naba8xc_fmXIlR2Zb4kV9CtJUTaXt_4adizO5ttR68hNU5a6ofG40kAkLLUo3bzqJZEvThSGO-EA; expires=Mon, 26 Oct 2026 07:58:56 GMT; Max-Age=2592000; path=/; domain=.xvid |
| vary | Accept-Encoding,User-Agent,Accept-Language,Cookie |
| x-frame-options | SAMEORIGIN |