Säkerhet
Hur vi skyddar kunddata — vad vi gör, var den lagras, och hur vi hanterar det om något skulle gå fel.
Hosting och datalagring
All kunddata ligger på servrar i Finland, hostade via Hetzner. Applikationen är en Next.js-app med en MariaDB-databas; båda körs i samma datacenter. Skanner-arbetare (Playwright/Chromium-webbläsare) körs på samma infrastruktur — ingen skanningsdata skickas till tredje parter utöver vad som listas på vår underbiträden-sida.
Kryptering
- I transit: All trafik mellan din webbläsare och CompliantHQ använder TLS 1.2+. Vi accepterar inte oskyddad HTTP för någon autentiserad endpoint.
- I vila: Kund-tillhandahållna API-nycklar (t.ex. CookieScript-tokens för rikare skanningar) krypteras med AES-256-GCM och en nyckel härledd via HKDF innan lagring.
- Backup: Daglig snapshot av databasen, bevaras i 7 dagar. Backuperna lagras på vår infrastruktur inom EU och lämnar aldrig EU/EES.
Autentisering
- Magisk länk-inloggning. Inga lösenord lagras. Varje inloggningslänk är engångs-användbar och löper ut efter 24 timmar. Sessioner använder HttpOnly, Secure, SameSite=Lax-cookies.
- Inga sociala inloggningar, ingen OAuth. Minskar attackytan och undviker hela klassen av cross-account-recovery-sårbarheter.
- Per-handling-auktorisering. Varje API-rutt och dashboard-sida går genom en central auktoriseringswrapper (
mainAuthorize/pageAuthorize) som verifierar både session och rollkrav innan handlern körs. En build-time-scan stoppar deploy om någon ny rutt saknar wrapper. En kompletterande automatiserad test-svit ligger på roadmappen för Q3 2026.
Åtkomstkontroll
- Produktionsdatabas-åtkomst är begränsad enligt minsta-behörighets-principen. Alla schemaändringar görs via versionskontrollerade migrationer som granskas innan driftsättning — aldrig som ad hoc-kommandon direkt mot produktionsdatabasen.
- Ingen utvecklare har stående åtkomst till kund-skanningsresultat i databasen; åtkomst sker via applikationens UI som arbetsyta-medlem endast.
- Interna admin-rutter (
/dashboard/admin/*) kräver både en autentiserad session och enis_admin-flagga satt i databasen.
Loggning och incidenthantering
- Åtkomstloggar: Server-åtkomstloggar bevaras i 90 dagar, används för incidenttriage.
- Applikationsloggar: Vi loggar felhändelser till applikationens egen log på prod-servern, men inte request-bodies eller PII.
- Extern felövervakning: Vi använder Sentry för crash reporting i både server- och webbläsarlagret. Datalagring sker i Sentrys EU-datacenter (Frankfurt) — ingen data lämnar EU/EES. Prestanda- och sessionsspårning i webbläsaren är avstängd, så på publika sidor skickas ingenting vid vanliga sidvisningar — endast när ett faktiskt fel uppstår. Felmeddelanden, stack-traces och runtime-kontext skickas; request-bodies, betalningsdata, inloggningsuppgifter och IP-adresser skickas avsiktligt inte. Fullständig beskrivning på underbiträden-sidan.
- Incidentavisering: Om vi upptäcker en säkerhetsincident som berör personuppgifter kommer vi att (a) anmäla till IMY (Sveriges dataskyddsmyndighet) inom 72 timmar enligt GDPR Art. 33 och (b) informera berörda användare utan onödigt dröjsmål enligt Art. 34.
Mjukvarusäkerhet
- Publika beroenden spåras via en commitad
package-lock.json; vi granskar kända sårbarheter mednpm auditoch håller beroenden uppdaterade. - SSRF-skydd i scannern blockerar loopback / RFC1918 / link-local / cloud-metadata-adresser, inbäddade credentials i URL:er, och icke-standard-portar — med egen test-svit.
- Indata valideras via Zod-scheman vid varje API-gräns; databas-frågor går genom Drizzle ORM med parametriserade queries.
Vad vi inte gör (än)
- SOC 2 / ISO 27001-certifiering: Inte än. Vi är en tidig produkt med en växande kundbas; certifiering ligger på roadmappen när enterprise-kunder efterfrågar det.
- Bug bounty-program: Inte än. Säkerhetsrapporter välkomna på hello@complianthq.ai — vi bekräftar inom en arbetsdag.
- Pen-test: Intern auktoriserings-revision genomförd Q2 2026. Externt pen-test är planerat under 2026.
Rapportera en sårbarhet
Mejla hello@complianthq.ai med steg för att reproducera. Avstå från att publicera offentligt innan vi bekräftat och patchat. Vi siktar på att bekräfta inom en arbetsdag och patcha inom 30 dagar för allvarliga problem. Koordinerad disclosure fungerar för båda parter.