Scan time: 2026-09-26 11:19:09
Overall Score
⚠ 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":57}],"23":[{"s":2,"d":43}],"last":{"s":2,"v":[57,43]},"t":1791 |
73 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/735a8da5-cfbf-4a3f-8b54-a913e2c1ea48/6/xv_12_t.avif
https://thumb-cdn77.xvideos-cdn.com/145e44d0-bc63-45b5-8df9-94d1265c0b8f/6/xv_17_t.avif
https://thumb-cdn77.xvideos-cdn.com/ce857292-1b38-408a-b479-904b297ac055/6/xv_10_t.avif
https://thumb-cdn77.xvideos-cdn.com/435b93e9-b7eb-40ff-8b84-46ff3db90e17/6/xv_2_t.avif
https://thumb-cdn77.xvideos-cdn.com/e9b27282-7071-46ce-8301-ab8dec7fc05a/6/xv_19_t.avif
https://thumb-cdn77.xvideos-cdn.com/2d522eed-7a3d-4dab-a0eb-dedca95806b8/6/xv_21_t.avif
https://thumb-cdn77.xvideos-cdn.com/f3017b85-8519-4d09-beee-ba301fe3c9b9/6/xv_2_t.avif
https://thumb-cdn77.xvideos-cdn.com/f6ae61bc-c5b6-4410-90cb-398c5bb3de2c/6/xv_22_t.avif
https://thumb-cdn77.xvideos-cdn.com/cad5c2da-1c03-46c6-9cbe-73ac912faa56/6/xv_27_t.avif
https://thumb-cdn77.xvideos-cdn.com/5a6b2e77-5a87-4711-93d9-53b046021cd7/6/xv_19_t.avif
https://thumb-cdn77.xvideos-cdn.com/f372263b-35a2-4c1c-9d2a-558c8e0354aa/6/xv_30_t.avif
https://thumb-cdn77.xvideos-cdn.com/e3bcd33f-92fc-4b58-8958-5662044e4287/6/xv_5_t.avif
https://thumb-cdn77.xvideos-cdn.com/b93f5c7a-dc3a-4581-a02f-136dfce65b00/6/xv_3_t.avif
https://thumb-cdn77.xvideos-cdn.com/a5ee09cf-3079-4f6c-9328-9329dece8445/6/xv_7_t.avif
https://thumb-cdn77.xvideos-cdn.com/e4f289cc-e1aa-4ae9-82a3-d1bafa4a7ca8/6/xv_9_t.avif
https://thumb-cdn77.xvideos-cdn.com/3497d2be-5eac-450d-8b34-530dc2866a3e/6/xv_29_t.avif
https://thumb-cdn77.xvideos-cdn.com/7b9e4c20-372b-4ebd-b057-225694f78904/6/xv_18_t.avif
https://thumb-cdn77.xvideos-cdn.com/2616d23b-dde4-4359-ab92-2575c51b6ffc/6/xv_28_t.avif
https://thumb-cdn77.xvideos-cdn.com/c8527a4a-985a-46c9-adff-ba65bd597eb3/6/xv_9_t.avif
https://thumb-cdn77.xvideos-cdn.com/e3000dd6-a984-4b5b-a19a-6263a9e7ac8f/6/xv_18_t.avif
... and 18 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-9a4f1a51a62/v3/js/skins/min/default.footer.static.js
https://assets-o7.xvideos-cdn.com/v-2f71f863585/v3/js/skins/min/default.header.static.js
https://assets-o7.xvideos-cdn.com/img/lightbox/lightbox-blank.gif
https://assets-o7.xvideos-cdn.com/v3/js/libs/jquery.min.js
https://assets-o7.xvideos-cdn.com/v3/js/skins/min/require.static.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/c5ba80bb-d0c5-425f-96a8-25108d693544/6/xv_11_t.avif
https://thumbs-gcore.xvideos-cdn.com/a6d333bf-4da5-4dc4-add7-c80b77ecb329/6/xv_19_t.avif
https://thumbs-gcore.xvideos-cdn.com/7be8b797-6117-4a63-986f-96cf984c7ad2/6/xv_30_t.avif
https://thumbs-gcore.xvideos-cdn.com/c681ff52-bd5e-4378-8fe9-8ba24277bc76/6/xv_12_t.avif
https://thumbs-gcore.xvideos-cdn.com/4148b3e2-a6de-46ab-9719-21d386eb429e/6/xv_20_t.avif
https://thumbs-gcore.xvideos-cdn.com/93816d8c-c6df-4262-8924-b7e743eefdd7/6/xv_30_t.avif
https://thumbs-gcore.xvideos-cdn.com/7edbc279-7985-46e6-ad4b-2bdd4146697a/6/xv_11_t.avif
https://thumbs-gcore.xvideos-cdn.com/31a7efac-fdcc-4dff-a8a2-931dff08c912/6/xv_16_t.avif
https://thumbs-gcore.xvideos-cdn.com/1a34c1b5-51c0-4a29-94a1-7c2a6923020f/6/xv_29_t.avif
https://thumbs-gcore.xvideos-cdn.com/f7bcb63a-b740-453f-82e8-ec9ec401bc68/6/xv_20_t.avif
Requested URLs:
https://z6v2p9a8.bkcdn.net/library/886962/925fc02d21766f3958921dc5c3f95041d84bef1e.mp4
https://z6v2p9a8.bkcdn.net/library/886962/65bf611c7f7fe1a3930f60aab19659aff820baaf.webp
... and 5 more request(s)
Requested URLs:
https://s.pemsrv.com/v1/api.php
https://s.pemsrv.com/cimp.php?t=api&data=H4sIAAAAAAAAA11RXW7DIAy+yi7QyDa2gT5vJ5h6AEKSLQ9tp6aqOsmHn2HVtE0fIAHG3w8EpDvIO9InkD3mPajFNLAONCCzPb8cjNHut3Waz9tQz0dLSbOSadAUsiXgJMEkR+FIJpAscUQVNeTAgRTZGIwMHKw
Requested URLs:
https://a.pemsrv.com/ad-provider.js
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 | 32132 |
| 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 09:19:05 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=3d54d948ba3fadc0DXK3KX09QschIfGYoxLmqfiFs6vHgS_QbF-jbDU-rL6DLdjE4FNfHvATHwW8Mis41NfO0bvpuY7hIaOEOXXIRvrki9EZf8NKDRVnkfaR9BrXsZIh1OzmcTxE7t2zNC7wpNzIjzDsHQ_LWXg7DNK7QSw0kWV-OBR_K13qRQLZz6IjlMyaElF6Nu9j78Yg3fVd; expires=Mon, 26 Oct 2026 09:19:05 GMT; Max-Age=2592000; path=/; domain=.xvid |
| vary | Accept-Encoding,User-Agent,Accept-Language,Cookie |
| x-frame-options | SAMEORIGIN |