Bezbednost (bankarski nivo)
Kontrole usklađene sa obrascima Stripe Dashboard-a i modernih bankarskih web aplikacija. Sve navedeno je live na SDK portal BFF-u.
Portal je BFF (tRPC) ispred Perper API-ja. Trgovci ne drže dugotrajne bearer tokene u JavaScript-u. Sesije, refresh cookie-i i secret-reveal step-up tokeni izdaju se samo preko Set-Cookie.
HttpOnly cookies + __Host- prefiks
Produkcijski cookie-i koriste browser `__Host-` prefiks (Secure, Path=/, bez Domain). Vrijednosti su HttpOnly tako da XSS ne može da izvuče tokene iz document.cookie.
- `__Host-perper.session` — kratka access sesija (bearer samo za serverske API pozive).
- `__Host-perper.persistent` — 30-dnevni refresh / PIN challenge state.
- `__Host-perper.key` — ~5s secret-reveal step-up token (SameSite=Strict).
- `auth.session` vraća samo javni identitet (id, username, imena, email) — nikad bearer token.
Klizni životni vijek sesije
Access sesija traje 8 sati i klizi na navigaciji / session poll-u (middleware + auth.session). Persistent cookie traje 30 dana. Odjava briše sve auth cookie-e uključujući legacy nazive.
CSRF zaštita
Primarno: SameSite=Lax cookie-i. Defense-in-depth: svaka tRPC mutacija provjerava Origin/Referer naspram Host (i X-Forwarded-Host iza Contabo-a). Cross-site POST se odbija sa FORBIDDEN.
Zaštita od brute-force
Login, PIN i secret-key re-auth dijele rate limiter: 5 grešaka u 15 minuta zaključava IP+subject na 15 minuta. Neuspješni pokušaji imaju i kratki nasumični delay (~180–400ms) radi smanjenja timing oracle-a.
Anti-enumeracija
Nepoznato korisničko ime i pogrešna lozinka vraćaju isti tekst: “Invalid username or password.” Klijenti ne smiju granati po exists vs mismatch.
Auth audit log
Strukturirani JSON redovi (`type: auth_audit`) pišu se u process log za login/PIN/key uspjeh, grešku, rate-limit i logout. Subject je skraćeni username/userId — nikad lozinka, PIN ili token.
HTTP security headeri
Svaki odgovor uključuje bankarski baseline:
- Content-Security-Policy (self + potrebni Next.js inline), frame-ancestors none, X-Frame-Options DENY
- Strict-Transport-Security (max-age=31536000; includeSubDomains), X-Content-Type-Options nosniff
- Referrer-Policy strict-origin-when-cross-origin, Permissions-Policy (camera/mic/geo/payment off)
- Cross-Origin-Opener-Policy same-origin, Cross-Origin-Resource-Policy same-site; autentifikovane rute šalju Cache-Control: no-store
Locale auth gate
Middleware štiti `/app` (i `/en|cnr/app/...`) da engleske rute ne mogu zaobići merchant workspace. `/pay` je javan; stranica traži prijavu prije terećenja Perper stanja.
Hostovani Pay hardening
Checkout koristi institucionalni white/red shell (isti jezik kao login). Iznosi se šalju API-ju kao decimalni stringovi (`zodMoney`). Success i pay ekrani imaju merchant/amount labele i secure-checkout napomenu. Plaćanja.
Projekat / webhook higijena
Kreiranje projekta validira apiUrl kao javni HTTPS (bez localhost / RFC1918). UI je CG/EN; tabele projekata pokazuju Active status; secret ima pristupačna copy dugmad. Projekti.
Pristupačnost i password manageri
Copy kontrole su pravi buttoni sa aria-label i aria-live “Kopirano”. Login koristi autocomplete=username / current-password; PIN koristi one-time-code. Greške imaju role=alert i aria-invalid.
Šta trgovci i dalje moraju
- Project secret čuvajte samo na serveru (env / vault) — nikad u mobile ili web client bundle-u.
- Fulfill narudžbi radite iz apiUrl callback-a, ne samo iz browser return URL-a.
- Za apiUrl i resultUrl koristite javni HTTPS; TLS sertifikati moraju biti validni.
- Nakon security upgrade-a jednom se odjavite (ili obrišite site cookie-e) da browser preuzme nove `__Host-` nazive.
- Verifikujte redirect `hash` i apiUrl `hash` kao HS256 JWT opaque `data` stringa project secretom (vidi docs Webhook-ovi). Webhook-ovi.
Obuhvat
Ove kontrole štite SDK developer portal BFF. Perper core ledger API ima sopstvene serverske kontrole. Rate limit je trenutno in-process (jedan Contabo Node); multi-instance bi zahtijevao dijeljeni store (npr. Redis). Verifikacija payment callback-a je na stranici Webhook-ovi. Ovlašćene institucije koje pregledaju Perper kao pružaoca tehnologije mogu koristiti ICT diligence paket na /partners/diligence.