Izolacija podataka
WorkThroughLine je multi-tenant: više organizacija deli istu instancu, ali nikada ne vidi tuđe podatke. Izolaciju držimo u dva sloja koja se ne oslanjaju jedan na drugi:
- Sloj aplikacije: svaki upit je ograničen na organizaciju iz sesije, a svi dolazni identifikatori (strane ključeve) proveravamo da pripadaju toj organizaciji pre bilo kakvog upisa.
- Sloj baze: PostgreSQL Row-Level Security (RLS). Aplikacija se na bazu povezuje nalogom bez superuser prava, pa se RLS zaista sprovodi - svaki zahtev radi u transakciji koja postavlja aktivnu organizaciju, i baza sama odbija redove izvan nje.
Migracije i održavanje baze idu preko odvojenog, privilegovanog naloga koji se ne koristi za saobraćaj aplikacije. Čak i da otkaže sloj aplikacije, RLS ostaje kao druga brana.
Pristup i autentifikacija
- Lozinke se nikada ne čuvaju u čitljivom obliku - samo kao bcrypt heš. Prijava troši konstantno vreme da ne bi otkrivala da li nalog postoji.
- Sesije: kratkotrajni JWT access token uz refresh token sa rotacijom. Ako se već iskorišćen (rotiran) token ponovo upotrebi, to tretiramo kao moguću krađu i poništavamo celu familiju tokena tog korisnika.
- Dvofaktorska prijava (2FA): opciona TOTP (bilo koja authenticator aplikacija, po RFC 6238), uz jednokratne recovery kodove za slučaj gubitka telefona. Recovery kodovi se čuvaju heširani.
- Kontrola pristupa po ulogama unutar organizacije određuje ko šta vidi i menja.
Enkripcija
- U prenosu: TLS na svim javnim vezama (Caddy uz Let's Encrypt sertifikate).
- U mirovanju: secreti koje sistem mora da pročita nazad - TOTP 2FA tajne i webhook tajne za potpisivanje - šifrovani su sa AES-256-GCM (autentifikovana enkripcija sa zasebnim nonce-om i tagom integriteta po zapisu). Vrednosti koje nikada ne moramo da dešifrujemo (lozinke, API ključevi) čuvaju se isključivo heširane.
Evidencija izmena (audit log)
Svaka izmena podataka automatski upisuje zapis u audit log, kroz sve module (strategija, otkriće, isporuka, dokumentacija).
- Administratori imaju org-wide pregled u podešavanjima: ko je šta i kada promenio, sa razlikama po poljima za kreiranje, izmenu i brisanje.
- Pregled se filtrira po korisniku, tipu akcije, entitetu i datumu, i može da se izveze.
- Na nivou pojedinačnog zadatka istoriju izmena vidite direktno u work item-u.
Rezervne kopije, oporavak i prenosivost
- Off-site backup: dnevni šifrovani snimak baze (uz runtime konfiguraciju) šalje se u šifrovani restic repozitorijum van servera. Sve se šifruje pre slanja, pa odredište nikada ne vidi čist sadržaj.
- Provera i dokaz: nedeljna provera integriteta repozitorijuma i mesečni automatski restore drill koji stvarno vraća poslednju arhivu u izolovanu, jednokratnu bazu i proverava je (SHA-256 manifest + broj redova i migracija). Backup ne smatramo ispravnim dok se vraćanje ne dokaže.
- Retencija: 14 dnevnih, 8 nedeljnih i 12 mesečnih snimaka; ciljani RPO je 24 sata. Automatski alarm javlja ako neki backup, provera ili drill zakasni.
- Samouslužni izvoz i vraćanje organizacije: administrator može izvesti celu organizaciju kao verzionisan, obnovljiv JSON paket (bez lozinki, 2FA tajni, tokena i webhook tajni), sa svim prilozima i njihovim SHA-256 heševima. Vraćanje u prazan zakupac ponovo izveze i uporedi rezultat da dokaže vernost kopije. Work item-i se dodatno mogu izvesti kao CSV. Ovo služi prenosivosti i dokazu da pilot možete povući netaknut.
API i webhook-ovi
- Pristup API-ju ide preko API ključa po organizaciji (čuva se heširan). AI integracija (Claude Code / MCP) je opciona i radi isključivo sopstvenim ključem organizacije, strogo ograničena na tu organizaciju.
- Potpisani webhook-ovi: svaka odlazna dostava nosi HMAC-SHA256 potpis tela poruke (zaglavlje
X-WTL-Signature), pa primalac može da proveri autentičnost; provera je konstantnog vremena. - SSRF zaštita: pošto korisnik zadaje URL webhook-a, sprečavamo da server dosegne privatnu mrežu. URL se validira, a odredišna adresa se proverava u trenutku povezivanja - blokiraju se loopback, privatni (RFC1918), link-local i cloud-metadata opsezi, čime se zatvara i DNS rebinding.
Recept za proveru potpisa i pregled API-ja su na stranici Za programere.
Prijava incidenta i dostupnost
- Dostupnost API-ja, javnog weba i login-a proverava se automatski; neuspešan deploy se automatski vraća na prethodnu verziju.
- Imamo pisanu proceduru za incidente sa nivoima ozbiljnosti. Bezbednosni ili operativni incident prijavite na [email protected] (vreme, URL i
requestIdako ga vidite; bez lozinki i osetljivog sadržaja). - O povredi podataka o ličnosti obaveštavamo administratore bez nepotrebnog odlaganja, a najkasnije u roku od 72 sata od saznanja.
Detalji o dostupnosti i prijavi su na stranici Status i incidenti.
Jurisdikcija, EU hosting i GDPR
- Podaci se primarno obrađuju na serverima u EU (Amsterdam, Holandija).
- Usklađeni smo sa Zakonom o zaštiti podataka o ličnosti Republike Srbije (ZZPL) i Opštom uredbom EU o zaštiti podataka (GDPR). O promeni ili dodavanju podobrađivača obaveštavamo najmanje 15 dana unapred.
- Detalji, uloge i puna lista podobrađivača su u Aneksu o obradi podataka (DPA) i Politici obrade podataka o ličnosti.
Šta (još) ne tvrdimo
WorkThroughLine je trenutno u besplatnoj beta fazi i o bezbednosti govorimo iskreno:
- Nemamo (još) ISO 27001 ni SOC 2 sertifikaciju - ne predstavljamo je i nećemo je tvrditi dok je ne steknemo.
- Ne obećavamo konkretan RTO (vreme oporavka) dok ga ne izmerimo na restore drill-u pune veličine; RPO je zasnovan na dnevnim snimcima (bez point-in-time recovery za sada).
- Puni podaci ugovornog obrađivača i obavezujući rokovi čuvanja/brisanja biće definisani pre prvog plaćenog ugovora.
Ako vam za pilot treba nešto što ovde ne vidite, pitajte - reći ćemo šta postoji, šta je u planu i šta ne radimo.
Imate bezbednosno pitanje pre pilota, ili vam treba ova stranica kao PDF za internu proveru? Sačuvajte je iz pregledača (Print → Save as PDF) ili nam pišite na [email protected].