howsafeismyapp

What we check

Every check, explained in plain language.

One page per finding: what it means, why it matters, how to fix it. The free scan tests all of them.

Art. 32/33 GDPR

Database readable without a login
Your app's database (often Supabase or Firebase) answers requests without any authentication — anyone with the URL can read the tables, including whatever user data they contain.

Art. 32 GDPR

Admin key exposed in frontend code
A service-role or admin API key is shipped inside the JavaScript your visitors download. Anyone can extract it and act as your backend.

Art. 44 GDPR

Google Fonts loaded directly from Google
Your app loads fonts from fonts.googleapis.com / fonts.gstatic.com. Every visitor's IP address is sent to Google servers in the US.

Art. 6 GDPR

Third-party tracking service embedded
An analytics or advertising script (Google Tag Manager, Meta Pixel, TikTok, Hotjar …) is embedded and sends visitor data to its vendor.

§ 25 TDDDG

Tracking cookie set without consent
A cookie used for tracking is written to the visitor's browser on the first page view, before any consent dialog.

§ 25 TDDDG

Tracking loads before anyone could consent
Tracking scripts fire on page load and no consent banner exists (or it loads too late). Data flows before the visitor had any choice.

Art. 32 GDPR

Resources loaded over unencrypted connections
Your HTTPS page loads some scripts, images or styles over plain HTTP.

§ 5 DDG German market

No imprint (Impressum) found
We couldn't find a page recognizable as an imprint at the usual paths or in the footer.

Art. 13 GDPR

No privacy policy found
No page recognizable as a privacy policy is linked from your app.

Art. 32 GDPR

Source map publicly accessible
Your build ships .map files that reconstruct the original source code — including comments, internal URLs and sometimes secrets.

Security header

No Content-Security-Policy
Your app is served without a CSP header, so the browser will run any script that gets injected into the page.

Security header

No HSTS (or lifetime too short)
The Strict-Transport-Security header is missing or expires quickly, so browsers may still try plain-HTTP connections.

Security header

No clickjacking protection
Your app can be embedded in a hidden iframe on someone else's page (no X-Frame-Options / frame-ancestors).

Security header

No nosniff header
Without X-Content-Type-Options: nosniff, browsers may guess content types and execute files that were never meant to be scripts.

BFSG German market

Basic accessibility gaps (BFSG)
Missing language attribute, page title, image alt texts or form labels — the machine-readable basics assistive technology relies on.

Check your app free