Scan time: 2026-09-13 14:04:58
Overall Score
⚠ This website has serious GDPR deficiencies. Immediate action is required.
GDPR Issues Detected (4):
❌ 3 third-party server(s) outside the EU/EEA — data transfers without legal basis may violate Art. 44–49 GDPR.
Affected servers outside the EU:
❌ 2 tracking service(s) detected — without prior consent (opt-in) this violates Art. 6(1) GDPR.
Detected trackers:
⚠ Third-party cookies are being set — without consent this violates the ePrivacy Directive.
⚠ 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 6 third-party cookie(s).
6 third-party cookie(s) detected. These can be used to track you across different websites.
Third-party cookies (e.g. from Google, Facebook) track visitors across websites. Under GDPR Art. 6 and ePrivacy / national implementations, explicit consent is required BEFORE setting them. Three-step fix: (1) identify which external services set the cookies, (2) remove services you don’t strictly need, (3) for essential services, add a consent banner that loads them only after "Accept".
WordPress plugin: Cookie-consent plugins for WordPress: "Complianz" (free, GDPR-focused, thorough wizard), "Real Cookie Banner" (free, knows many services), "Borlabs Cookie" (paid, most feature-complete). Critical configuration: set all tracking services to "do NOT load before consent" — most plugins detect standard services (GA, Maps, YouTube) automatically.
✓ How to verify it works: Open the site in incognito mode → F12 → Application → Cookies → your-domain.com. BEFORE clicking "Accept" there must be NO cookies from google.com, facebook.com etc. AFTER consent, yes.
2 of 7 cookie(s) without HttpOnly flag — could be read by malicious code.
Cookies without the "HttpOnly" flag can be read by JavaScript — an XSS attacker can steal session cookies and impersonate the logged-in user. Set HttpOnly for all cookies JavaScript doesn’t actively need.
File: .htaccess in the web root
<IfModule mod_headers.c>
Header always edit Set-Cookie "^(.*)$" "$1; HttpOnly" "expr=!(resp('Set-Cookie') -strmatch '*HttpOnly*')"
</IfModule>⚠ Cleaner: set cookies with HttpOnly directly (PHP: setcookie(..., [..., 'httponly'=>true])). Exception: cookies that JS actively reads (e.g. some consent cookies).
File: functions.php of your CHILD theme (or better wp-config.php)
@ini_set('session.cookie_httponly', '1');
@ini_set('session.cookie_secure', '1');⚠ WordPress login cookies have been HttpOnly since 2.x. If you use a plugin that sets session cookies (e.g. WooCommerce cart pre-login), check its settings.
✓ How to verify it works: F12 → Application → Cookies → "HttpOnly" column shows checkmarks everywhere (except for deliberately JS-readable cookies like the consent cookie).
7 of 7 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 |
| Name | Domain | Encrypted | Server only | SameSite |
|---|---|---|---|---|
| fromaffiliate | .chaturbate.com | Yes | Yes | None |
| in_hit | chaturbate.com | Yes | No | None |
| sbr | .chaturbate.com | Yes | Yes | None |
| csrftoken | .chaturbate.com | Yes | No | None |
| cf_clearance | .chaturbate.com | Yes | Yes | None |
| __cf_bm | .chaturbate.com | Yes | Yes | None |
1 localStorage and 0 sessionStorage item(s) found.
| Name | Value |
|---|---|
| thumbloadstats_vthumbs | {"21":[{"s":2,"d":51}],"23":[{"s":2,"d":48}],"last":{"s":2,"v":[51,48]},"t":1789 |
124 request(s) to 13 different third-party servers.
3 third-party server(s) outside the EU/EEA — potentially problematic for GDPR compliance.
GDPR-relevant: visitor data (at least IP + User-Agent) is transmitted to servers outside the EU/EEA. Since the Schrems-II ruling (2020) this requires Standard Contractual Clauses + supplementary technical measures AND prior consent. Best fix: replace with EU alternatives where possible.
WordPress plugin: Common culprits and EU alternatives: Google Fonts → Bunny Fonts or self-host (plugin "OMGF — Host Google Fonts Locally"). Google Analytics → Matomo (self-hosted) or Plausible (EU servers). Google reCAPTCHA → hCaptcha (EU) or Friendly Captcha. Google Maps → OpenStreetMap. YouTube embeds → plugin "WP YouTube Lyte" loads only after click. CDN: Cloudflare → BunnyCDN (EU) or KeyCDN.
✓ How to verify it works: Load in incognito mode, F12 → Network → list all requests → check "Domain" column for non-EU servers. After migration no unrequested US domains should load.
10 third-party server(s) within the EU/EEA.
Requested URLs:
https://thumb-cdn77.xvideos-cdn.com/19833cff-de6f-4a8d-93e0-132da12877b9/6/xv_1_t.avif
https://thumb-cdn77.xvideos-cdn.com/c012b6b1-d15f-492c-9824-443869605d0c/6/xv_24_t.avif
https://thumb-cdn77.xvideos-cdn.com/90016b28-2768-47a7-891c-d2c1ea8f602e/6/xv_5_t.avif
https://thumb-cdn77.xvideos-cdn.com/e86a75c1-1d6c-4ca5-915e-0d392a912b42/6/xv_16_t.avif
https://thumb-cdn77.xvideos-cdn.com/6d30ccb8-eb7a-494b-9f9f-f641883d7361/6/xv_10_t.avif
https://thumb-cdn77.xvideos-cdn.com/b59cf7e4-5efc-4f76-942a-125031bcbf86/6/xv_30_t.avif
https://thumb-cdn77.xvideos-cdn.com/7bf68a17-a9e5-4e3f-8125-1fe45f0864f8/6/xv_6_t.avif
https://thumb-cdn77.xvideos-cdn.com/f551ca61-fc13-484a-b36c-9e3f53fec288/6/xv_28_t.avif
https://thumb-cdn77.xvideos-cdn.com/6e99f660-c017-436b-a59f-3b40def724c1/6/xv_6_t.avif
https://thumb-cdn77.xvideos-cdn.com/b7ec4e2d-c39b-4a07-8e1c-108ed3fc823e/6/xv_1_t.avif
https://thumb-cdn77.xvideos-cdn.com/d857d1ec-6b66-4803-881e-7e0c9ed3e63a/6/xv_30_t.avif
https://thumb-cdn77.xvideos-cdn.com/a8d5bcc2-109d-4900-a2ae-db36ff51db29/0/xv_2_t.jpg
https://thumb-cdn77.xvideos-cdn.com/095c3663-fe1c-42ae-9bb9-fec85bea6ef9/6/xv_29_t.avif
https://thumb-cdn77.xvideos-cdn.com/99f8a468-60a1-4348-891f-0b7ed3ee4fd0/6/xv_19_t.avif
https://thumb-cdn77.xvideos-cdn.com/7f18082f-614e-49ac-a5de-68a51ff57642/6/xv_30_t.avif
https://thumb-cdn77.xvideos-cdn.com/ab17da1b-4da0-4c39-a9fe-36adab7c6ecf/6/xv_3_t.avif
https://thumb-cdn77.xvideos-cdn.com/d2c9bb4c-06ae-4ba0-a5fb-19028129d6e5/6/xv_11_t.avif
https://thumb-cdn77.xvideos-cdn.com/c30adb3c-9d07-46a9-8399-71154db8e0bb/6/xv_27_t.avif
https://thumb-cdn77.xvideos-cdn.com/79f0e01f-2c19-4c34-a49c-d668cbf79922/6/xv_18_t.avif
https://thumb-cdn77.xvideos-cdn.com/58fbe81d-1ec1-4995-bcfe-999d737b45cc/6/xv_30_t.avif
... and 22 more request(s)
Requested URLs:
https://web2.static.mmcdn.com/CACHE/css/output.c867160aebdb.css
https://web2.static.mmcdn.com/CACHE/css/output.87d99870dcef.css
https://web2.static.mmcdn.com/CACHE/css/output.255ebbc3ad6a.css
https://web2.static.mmcdn.com/CACHE/css/output.72d59465c7c5.css
https://web2.static.mmcdn.com/CACHE/js/output.427e085f0fcf.js
https://web2.static.mmcdn.com/CACHE/js/output.95c3694eb3bd.js
https://web2.static.mmcdn.com/CACHE/js/output.21a69f49335b.js
https://web2.static.mmcdn.com/CACHE/js/output.9408d0e566d3.js
https://web2.static.mmcdn.com/cachebust/runtime-react-ad2472e6056eb3023402.js
https://web2.static.mmcdn.com/CACHE/js/output.ad8bfd0d930c.js
https://web2.static.mmcdn.com/cachebust/runtime-prod-7b73a8d2eb29a60444e5.js
https://web2.static.mmcdn.com/cachebust/1031-prod-5c990b3fc3454c451393.js
https://web2.static.mmcdn.com/cachebust/live_cam_preview-prod-bb671f8d09954a0aff0c.js
https://web2.static.mmcdn.com/cachebust/510-react-a3a87006a055e0d937e3.js
https://web2.static.mmcdn.com/cachebust/987-react-b7e19da41350ee8a717b.js
https://web2.static.mmcdn.com/cachebust/58-react-1102d690d84c8c01ded7.js
https://web2.static.mmcdn.com/cachebust/79-react-ac1b9621856a3038b2c1.js
https://web2.static.mmcdn.com/cachebust/97-react-957c4ff8dd340f1eca91.js
https://web2.static.mmcdn.com/cachebust/601-react-79119920b0dd96ca887a.js
https://web2.static.mmcdn.com/cachebust/243-react-ec3d69da55fb84244fdf.js
... and 16 more request(s)
Requested URLs:
https://assets-o7.xvideos-cdn.com/v-1545ea9594e/v3/css/default/main.css
https://assets-o7.xvideos-cdn.com/v-3a6db248874/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/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-b125e48ca0e/v3/js/i18n/front/english.json
https://assets-o7.xvideos-cdn.com/v-1545ea9594e/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-03b89666bbe/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-03b89666bbe/v3/js/jquery.js
https://assets-o7.xvideos-cdn.com/v-03b89666bbe/v3/js/libs/hls-1.2.5.min.js
Requested URLs:
https://chaturbate.com/in/?tour=Ats2&campaign=X7hVR&track=00E_Native_8520268_146148900&click_id=otdZbHTXHPHNTS7bc7qrrKqbJ3TU1zU23Syulc6qW11Mzp3UyuldK6V1NdMs0tFLp7qpraLnT21zV1SuldM6V0rpXSumdK6V0znaT7aT
https://chaturbate.com/toplivecampreview/?inhit_token=eyJjYW1wYWlnbiI6Ilg3aFZSIiwiY2xpY2tfaWQiOiJvdGRaYkhUWEhQSE5UUzdiYzdxcnJLcWJKM1RVMXpVMjNTeXVsYzZxVzExTXpwM1V5dWxkSzZWMU5kTXMwdEZMcDdxcHJhTG5UMjF6Vj
https://chaturbate.com/livecampreview/?campaign=X7hVR&click_id=otdZbHTXHPHNTS7bc7qrrKqbJ3TU1zU23Syulc6qW11Mzp3UyuldK6V1NdMs0tFLp7qpraLnT21zV1SuldM6V0rpXSumdK6V0znaT7aTay020a1aV17VUU53T8Va1aza6XVOlcpHe
https://chaturbate.com/cdn-cgi/challenge-platform/scripts/jsd/main.js
https://chaturbate.com/cdn-cgi/challenge-platform/h/g/scripts/jsd/330e41bb475c/main.js?
https://chaturbate.com/cdn-cgi/challenge-platform/h/g/jsd/oneshot/330e41bb475c/0.1976467379792619:1789297520:SheO1Jm5sGGRkqHslS0HhPpN30tyTXp2_1N_ou09zdk/a3a7045bfaba97c1
https://chaturbate.com/push_service/lcp_presence/glossybabe_/?lcp_impression_id=01a09aa7-f5cd-7657-8352-b6540447f39c
https://chaturbate.com/fossil/i/
Requested URLs:
https://thumbs-gcore.xvideos-cdn.com/5e5636d7-2872-442d-958a-611ed5558005/6/xv_7_t.avif
https://thumbs-gcore.xvideos-cdn.com/d023aada-6ee4-49f2-bd7d-acae49cd6cf5/6/xv_13_t.avif
https://thumbs-gcore.xvideos-cdn.com/bca24d15-0b77-4950-86df-a83aa6c6631b/6/xv_27_t.avif
https://thumbs-gcore.xvideos-cdn.com/c0d17912-468d-4955-8479-dfb9907f460b/6/xv_12_t.avif
https://thumbs-gcore.xvideos-cdn.com/e3debee6-8ffa-4784-a685-684973d619ec/6/xv_19_t.avif
https://thumbs-gcore.xvideos-cdn.com/02fad105-55c7-44dd-b114-78738eeb8547/6/xv_11_t.avif
Requested URLs:
https://web.static.mmcdn.com/jsi18n/en/djangojs.js?hash=1546343b16be
https://web.static.mmcdn.com/jsi18n/en/frontend.js?hash=1546343b16be
https://web.static.mmcdn.com/cachebust/8345-prod-b2782f262599f36fe78f.js
https://web.static.mmcdn.com/images/logo-new-dark.svg
Requested URLs:
https://nwr.mmcdn.com/1/6f524845d1?a=24279235&v=1.321.0&to=MwYEbUdYXxJQWhULDApMIExbWkUIXldOAQsFF0hPXFxGEgtVCBQGOwAHVGpJQwRHUAQV&rst=1577&s=eec25bb7c4e03c84&ref=https://chaturbate.com/livecampreview/&p
https://nwr.mmcdn.com/events/1/6f524845d1?a=24279235&v=1.321.0&to=MwYEbUdYXxJQWhULDApMIExbWkUIXldOAQsFF0hPXFxGEgtVCBQGOwAHVGpJQwRHUAQV&rst=1827&s=eec25bb7c4e03c84&ref=https://chaturbate.com/livecampre
https://nwr.mmcdn.com/events/1/6f524845d1?a=24279235&v=1.321.0&to=MwYEbUdYXxJQWhULDApMIExbWkUIXldOAQsFF0hPXFxGEgtVCBQGOwAHVGpJQwRHUAQV&rst=1829&s=eec25bb7c4e03c84&ref=https://chaturbate.com/livecampre
https://nwr.mmcdn.com/ins/1/6f524845d1?a=24279235&v=1.321.0&to=MwYEbUdYXxJQWhULDApMIExbWkUIXldOAQsFF0hPXFxGEgtVCBQGOwAHVGpJQwRHUAQV&rst=1831&s=eec25bb7c4e03c84&ref=https://chaturbate.com/livecamprevie
Requested URLs:
https://s.pemsrv.com/v1/api.php
https://s.pemsrv.com/cimp.php?t=api&data=H4sIAAAAAAAAA21RW04DMQy8Chdo5HccvuEEiAN0s1voBy1iUQWSD4+zFAkkNIkVO/aMLROQ7aDtkG/Ab0FulaN6EStUUCTu7h9DMD4ux3k5r6WfXwKBKEPG5tzCQTxrtFWVSqHg4UrJ6oFiKN4AQiAoICEmgMA
https://s.pemsrv.com/iframe.php?url=H4sIAAAAAAAAAzWOW2.CMACF_42P2hYosMQse5hhA_FCqYQX0gsZTMS2FqJkP37qsrfz5Zx8OY216vKyWIiG2cFwZuu5OJ8Wbb94tefBLN_sBc0EOynWfvXLwm_ofmYNE8clAO9Vymw71lXgIYBwUEEXQzcIAZiJrhXH
Requested URLs:
https://f.static.mmcdn.com/aG34bH-f2.min.js
https://f.static.mmcdn.com/aG34bH-ant.min.js?3.12.14
Requested URLs:
https://a.pemsrv.com/ad-provider.js
Requested URLs:
https://jpeg.live.mmcdn.com/stream?room=glossybabe_&f=59643369
Requested URLs:
https://thumb.live.mmcdn.com/roomad/glossybabe_-15.mp4
Requested URLs:
https://nwr.static.mmcdn.com/nr-spa-1.321.0.min.js
2 known tracker(s) detected! These track visitors across different websites.
Trackers (Google Analytics, Facebook Pixel, …) capture visitors and follow them across multiple sites. Under GDPR Art. 6 and ePrivacy / national implementations, explicit consent is required BEFORE loading the tracker. "Continued scrolling = consent" is NOT acceptable.
WordPress plugin: Consent plugins that properly block trackers until consent: "Complianz" (free, very good), "Real Cookie Banner", "Borlabs Cookie" (paid, most thorough). Principle after setup: do NOT embed the tracker snippet (e.g. GA script) directly in your theme — register it with the consent plugin, which only releases it after "Accept". Privacy-friendly tracker alternatives: Matomo (cookieless mode → may need no consent), Plausible (EU, anonymous, vendor claims no consent needed — legal advice recommended).
✓ How to verify it works: Incognito, load page — BEFORE "Accept": F12 → Network → no requests to google-analytics.com, facebook.com/tr etc. AFTER "Accept", yes.
Chaturbate (Advertising): chaturbate.com
mmcdn.com (FingerprintingInvasive): web.static.mmcdn.com
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.
Trackers are loaded on page load — possibly BEFORE consent is given.
Your trackers are loaded BEFORE the user can consent ("pre-consent loading"). Common misconfiguration in cookie plugins — banner appears, but too late: the GA script is already running. Violates ePrivacy.
WordPress plugin: Almost always caused by the theme or a tracking plugin that embeds the tracker code directly (e.g. "Google Analytics for WordPress" with auto-insert). Fix: 1) remove tracking code from the theme/plugin. 2) In the consent plugin (Complianz/Real Cookie Banner): register the tracker as a "service", paste the snippet there — the plugin will load it only after consent. 3) ALTERNATIVELY: plugin "PYS PixelYourSite" combined with consent gating. Do NOT rely on "GA anonymized before consent" — legally unsettled and risky.
✓ How to verify it works: Incognito → F12 → Network (clear all, start recording) → load page, do NOT click banner, wait 10 seconds → there must be NO requests to google-analytics.com, googletagmanager.com, facebook.com/tr, doubleclick.net etc.
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. 6 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; HttpOnly" "expr=!(resp('Set-Cookie') -strmatch '*HttpOnly*')"
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_httponly', '1');
@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; 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
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_httponly', '1');
@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 | 32023 |
| 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 | Sun, 13 Sep 2026 12:04:52 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.dtbxnc.com"), ch-ua-platform-version=(self "https://s.orbsrv.com" "https://s.pemsrv.com" "https://s.dtbxnc.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=ed6fc9ab701af515ytYmyPIilRFIwaoecvqQ3J-gQX2o1AFPWw-XYdB6uJNvj4Dnri-oDlZTj4qepEmlU3EhTfkjtULAzW0W6a8NfoYUQmueIbL_vRXi3hJbzoeFIByqsZKQFnTUkzvazOjlcTm5pjZxYPRxl47Zo56g8rnkami054UuuipTC3neJiZ3N5xWDUYbO2XxoMJsDdM2; expires=Tue, 13 Oct 2026 12:04:52 GMT; Max-Age=2592000; path=/; domain=.xvid |
| vary | Accept-Encoding,User-Agent,Accept-Language,Cookie |
| x-frame-options | SAMEORIGIN |