Technical audit · 2026-08-06

gdpru.eu

Public archive of GDPR compliance audits

The project's own site — 72 requests, nine pages viewed across two language versions in 66 seconds. Every request goes to gdpru.eu: fonts, the charting library, the flow map and all scripts sit on its own server. Zero Set-Cookie headers for the entire session. The content security policy allows only the site's own origin; framing is denied. No violations recorded.

Timeline of the leak

+0 ms · home page
The document is served from gdpru.eu, server statichost.eu, connection over HTTP/3. Set: content security policy, strict transport with preload, no content-type sniffing, referrer policy and a frame-embedding ban. The browser sent a DNT: 1 header.
+221…+304 ms · home-page resources
Stylesheet, logo, search script, flow-map data and script, two IBM Plex Sans weights from /fonts, favicon — all from the site's own domain.
+40.1…+43.7 s · Russian-version sections
Countries, changes, articles. The charting library, chart data, change calendar and policy-history file are loaded — all from gdpru.eu.
+46.1…+56.2 s · English version
Switch to /en/. Language variants of the search, map-data and chart-data scripts are loaded as separate files from the site's own domain; shared libraries come from cache with a 304 code.
+63.6 s · return
The English home page is reopened. All resources are served via conditional requests; no new outbound calls occur.

Declared versus actual

The site collects nothing: no cookies, no analytics, no trackers, no counters, no pixels — заявлен
Not a single request to a third-party domain when the page loads — заявлен
Fonts and scripts sit on the site's own server, not on Google Fonts or a third-party CDN — заявлен
The IP address is processed only at the moment the page is delivered and is not stored anywhere — заявлен
Hosting logs contain neither the IP address nor the user-agent string; retention is no more than 7 days — заявлен
Legal basis for visitors — legitimate interest, Art. 6(1)(f), with the three-step test set out — заявлен
The IP address is expressly acknowledged as personal data, citing the Breyer case (C-582/14) — заявлен
Processor — statichost.eu (Sweden), Art. 28 agreement signed; engaged sub-processor — Hetzner Online GmbH (Germany) — заявлен
BunnyWay d.o.o. (Slovenia) — an approved but not engaged sub-processor — заявлен
No transfers outside the EEA; Chapter V is not engaged — заявлен
The audit archive is a separate processing operation based on Art. 85 GDPR through IKS § 4 and § 5, with the safeguards of Art. 89(1) — заявлен
Supervisory authority — Andmekaitse Inspektsioon; response deadline for requests — 30 days — заявлен

Context

gdpru.eu is a public archive of technical audits of websites against data protection requirements. It publishes analyses accompanied by network-traffic captures and their checksums, the texts of the policies audited, correspondence with companies and regulators, the methodology and country statistics. The controller is the gdpru.eu project, Estonia; contact — contact@gdpru.eu. The site is static, served by the hosting provider statichost.eu.

The measurement: 72 requests, one domain. The capture lasted 66 seconds, during which nine pages were opened across two language versions: the home page, the countries, changes and articles sections in Russian, then the English home page, the audits and countries sections in English, and a return.

Auditing your own site by the method you use on others is a thankless exercise: if anything turns up, you have to explain yourself in public. But otherwise the whole project would rest on nothing but its word. The processing is described by the privacy policy in its version of 12 July 2026; below it is checked against the capture line by line.

Who the data goes to directly

No one. There are no external recipients in the capture.

Declared versus actual

The policy opens with the claim easiest to disprove by measurement: not a single request to a third-party domain when the page loads. In the same place the reader is directly invited to check this themselves by opening the developer tools. The capture confirms the claim on every count.

Not a single external call across nine pages in two languages. The walkthrough deliberately covered the sections with interactive elements — the data flow map, the country chart, the policy change calendar, the filters in the archive. That is usually where external dependencies surface: developers most often pull charting and map libraries from public CDNs, because it is two lines shorter. Here the charting library sits in /js/chart.umd.js on the site’s own server — all 205 kilobytes, downloaded and placed alongside. The flow map and its data are its own too.

The language versions pull nothing extra. When switching to English, separate data files are loaded — site-search.en.js, flowmap-data.en.js, countries-chart-data.en.js — but all from the site’s own domain. Shared libraries come from cache.

Fonts are local. Two IBM Plex Sans weights are served from the /fonts directory. There are no calls to Google’s servers.

Cookies are not set. Zero Set-Cookie headers across all 72 responses.

Hosting matches what was declared. Every response carries the server header statichost.eu — the very processor named in the policy by name, with its country and the existence of an Art. 28 agreement stated. There are no signs of a CDN in the capture, which is consistent with the note about the unused sub-processor.

A consent mechanism is absent — and here that is correct. There is nothing to manage: no optional scripts were found. The policy states this outright — the rule on consent for access to a device does not apply, because there is nothing to apply it to.

Protective headers

The content security policy is drawn up strictly: by default only the site’s own origin is allowed, and the same restriction is duplicated in separate directives for scripts, styles, fonts, images, network connections, the base URL and form submission. Framing is denied entirely, insecure connections are upgraded to secure ones. The only relaxation is allowing inline styles — a common necessity for a static build.

The value here lies not so much in protection as in demonstrability. The project’s main claim — the absence of third-party calls — is now declared by the server itself in machine-readable form. It can be checked with a single command, without opening developer tools and without taking anyone’s word for it. At the same time the header works as insurance against one’s own carelessness: if tomorrow an external script accidentally slips into the template, the browser simply will not execute it.

Alongside are set: a referrer policy with the value strict-origin-when-cross-origin — when following an external link from an audit, the audited organisation receives only the domain name, not the address of the specific page the visitor was reading; a frame-embedding ban in a separate header with the value DENY, duplicated by a directive in the content security policy; strict transport with a one-year term, subdomain inclusion and the preload flag; a ban on content-type sniffing.

Among the technical details that have no bearing on data processing but speak to the care of the build: 67 of 72 requests went over HTTP/3; twenty-four unique addresses served seventy-two requests — thirty-two responses came back with a 304 code, meaning the cache works and no redundant traffic is generated; the names of the stylesheet and map script contain a content hash, so a file cannot be swapped without changing its name.

Proven: there are no external transfers across nine pages. All requests are addressed to the site’s own domain.

Proven: cookies were not set in this session. None of the responses carry a Set-Cookie header.

Proven: protective headers are set and drawn up strictly. Verifiable directly from the main document’s response.

Confirmed by the hosting operator: the content and retention of the logs. The policy states that the logs record neither the IP address nor the user-agent string, and that retention does not exceed seven days. This is not verifiable by a browser measurement; a written confirmation was obtained from the operator statichost.eu.

Not proven and not claimed: the data route on the hosting side. The server header shows who serves the response, but not the infrastructure it passed through. The absence of CDN signs is consistent with the statement about the unused sub-processor, but does not constitute confirmation of it.

Limits of observation

The measurement covers nine pages across two language versions, in one state — ordinary browsing without interacting with forms.

The observation captures the browser’s behaviour. Server-side processing and the actual geography of storage are not verifiable by a browser measurement. The second processing operation described in the policy — personal data within the published archive materials — has no bearing on the operation of the site and is not reflected in the capture.

The file is published stripped of personal data by the same rules applied to others’ captures: request cookie headers, response bodies and tab headers are removed. All the analysis’s claims rest on the request addresses, their composition and the response headers visible in the file.

The audit of the site’s own site was conducted by the same methodology and with the same limitations as the rest. A reader wishing to verify it independently need only repeat the measurement: the tool and procedure are described in the methodology section, and the checksum of the capture is given in this card’s header.

Conclusion

Across nine pages opened in two language versions the site sent not a single request outward. Fonts, the charting library, the flow map, the filters, the change calendar — everything sits on its own server, including the separate language data files. Not a single cookie for the entire session. The hosting in the response headers matches the processor named in the policy; there are no signs in the capture of the approved but not engaged sub-processor.

The technical side is tightened to the same requirement: the content security policy allows only the site’s own origin and denies framing, and the referrer policy does not let audited organisations learn which specific page a visitor who followed a link was reading. The promise the policy opens with is now not only checked by measurement but declared by the server itself — and it can no longer be broken silently.

No violations recorded.

Evidence
Original (audit)
HAR file: ee/gdpru-eu-2026-08-06.har
SHA-256: 245c0eeb18e7107fd6977a9e1c8092dbc81677fc26829f4bb810b44fb44ee8ce
HAR files are stored on EU infrastructure (Proton Drive). SHA-256 is published for integrity verification.