Zasebna baza podataka
Pri otvaranju trgovine nastaje nova baza, imenovana po vašem slug-u. Narudžbe i kupci nisu u istim tablicama kao tuđi.
Sigurnost
Svaka trgovina dobiva svoju bazu podataka, svoje datoteke i sesiju vezanu isključivo na sebe. Ispod stoji samo ono što možemo pokazati u kodu — bez značka certifikata koje nemamo.
Ime baze i putanja nastaju iz slug-a trgovine pri otvaranju.
Kod većine platformi sve trgovine dijele istu bazu, a razdvaja ih stupac s brojem trgovine. Kod nas se trgovine razdvajaju prije nego upit dođe do podataka.
Pri otvaranju trgovine nastaje nova baza, imenovana po vašem slug-u. Narudžbe i kupci nisu u istim tablicama kao tuđi.
Slike i prilozi idu u vlastitu mapu po trgovini; naljepnice dostavljača na disk koji web ne servira.
Prijava zna kojoj trgovini pripada. Sesija koja dođe iz druge trgovine se odbacuje, a token se izdaje iznova.
Slug prolazi kroz dopuštene znakove i popis rezerviranih imena (admin, api, www…). Pokušaj rezerviranog imena diže obavijest.
Pošteno do kraja
Odvajanje provodi aplikacija time što bira bazu, a ne baza time što odbija pristup — jedan korisnički račun na bazi dolazi do svih trgovina. Zato se ne hvalimo da je pristup tuđim podacima „nemoguć", nego da je razdvojen na sve četiri razine i pokriven testovima koji padnu ako se pravilo o sesiji pokvari.
Sigurnost se dobrim dijelom svodi na to koliko pravila stranica pošalje pregledniku. Svaka stranica trgovine nosi ih ovoliko, bez vašeg postavljanja.
strict-transport-security: max-age=31536000; includeSubDomains
content-security-policy: default-src 'self'; object-src 'none';
frame-ancestors 'self'; base-uri 'self';
form-action 'self' <pružatelji plaćanja>
x-frame-options: SAMEORIGIN
x-content-type-options: nosniff
referrer-policy: strict-origin-when-cross-origin
cross-origin-opener-policy: same-origin
permissions-policy: camera=(), microphone=()
Skraćeno radi čitljivosti; pravila sadržaja su dulja jer imenuju svaki dopušteni izvor.
Poddomena trgovine radi preko HTTPS-a s certifikatom koji se obnavlja sam. Vlastitu domenu spajamo mi i uz nju izdajemo certifikat.
Panel trgovine je jedina vrata do vaših podataka. Zato su sporo otvaranje krivim ključem i zapis o tome što je tko promijenio dio same platforme.
Nakon pet pogrešnih pokušaja prijava se zaključava — i po adresi s koje se pokušava i po e-pošti koja se pokušava. Napad s tisuću adresa na jedan račun tako ne prolazi.
Zaposleniku dajete vlastiti račun umjesto da dijelite svoj. Račune otvara i zatvara samo glavni administrator, a njega se ne može preimenovati, ugasiti ni izbrisati.
Obrazac za zaboravljenu lozinku odgovara jednako i kad e-pošta ne postoji — tako se preko njega ne može provjeriti tko ima račun.
Svaka izmjena narudžbe, proizvoda, stranice ili postavke zapisuje se s korisnikom, vremenom, adresom i preglednikom. Zapisnik otvarate u panelu.
Maskira se prije zapisa
Vrijednost se sprema kao ***, pa ključevi pružatelja plaćanja ne ostaju u zapisniku.
Dostupnost po planu
Broj administratorskih računa po planu čita se iz cjenika. Zaštita prijave, zapisnik promjena i provjera datoteka rade jednako u svakom planu.
Usporedite planovePodaci o kartici i učitane datoteke. Prvo ne držimo, drugo propuštamo kroz četiri provjere.
Broj kartice kupac upisuje na stranici pružatelja plaćanja, ne u trgovini. U bazi trgovine nema ni jednog stupca za broj kartice, rok važenja ili sigurnosni kod — ostaje narudžba, iznos i oznaka transakcije koju pružatelj vrati.
Uz narudžbu se čuva
Pravila sadržaja pritom imenuju svakog pružatelja kojem obrazac smije poslati podatke — na bilo koju drugu adresu preglednik ga ne pusti.
Slika s podmetnutim kodom je klasičan način da se preuzme trgovina. Zato se svaka učitana datoteka provjeri četiri puta, prije nego dođe na disk.
Nastavak s popisa
Dopušteni su samo jpg, png, gif, webp, pdf te Word i Excel. SVG, HTML i PHP nikad.
Pravi tip sadržaja
Stvarni tip datoteke mora odgovarati nastavku — preimenovana skripta ne prolazi.
Slika se mora otvoriti
Ako se slika ne može pročitati kao slika, odbija se.
Pregled početka datoteke
Prvi kilobajti se čitaju i traži se kod. Nađe li se, prijenos se zaustavlja i stiže obavijest.
Kad vas jednom pitaju je li kupac dao pristanak, treba pokazati kada i s koje adrese. Trgovina to zapisuje sama, i za registrirane kupce i za goste.
Uz svaki zapis stoji i IP adresa. Primjer je ilustrativan.
Stranice o sigurnosti su puna značaka i postotaka koje nitko ne provjerava. Radije ćemo napisati kraće i točno.
Pitajte nas konkretnoNaše certifikate
ShopKit nema ISO, SOC 2 ni PCI DSS certifikat i ne prikazuje ih. Pružatelji kartičnog plaćanja imaju svoje — to je njihova potvrda, ne naša.
Postotke dostupnosti
Ne pišemo „99,9 %" jer to ne mjerimo vanjskim nadzorom. Kad počnemo mjeriti, pisat će brojka i kako je izmjerena.
Nepogrešivost
Nijedna platforma nije neprobojna. Ono što možemo obećati je da greška ne prođe tiho: aplikacijska greška, zastoj u obradi i sumnjiv prijenos datoteke šalju obavijest, a ispravnost svih baza provjerava se svaki dan.
Treba vam odgovor za vašeg pravnika ili IT-ovca? Pišite nam i odgovorit ćemo konkretno, bez općenitosti.
Ne postavljate certifikat, ne pišete pravila sadržaja i ne birate razinu zaštite. Otvorite trgovinu i provjerite — prvih 14 dana ne naplaćujemo.
Zasebna baza, HTTPS, zapisnik promjena i GDPR privole rade u svakom planu, i na Starteru.