Sigurnost i podaci: vaš rad ostaje lokalan
PanelCraft je desktop aplikacija koja prvenstveno radi bez interneta. Vaši projekti, cjenici, evidencija klijenata i slike dekora čuvaju se na vašem računaru, a aplikacija je izrađena tako da zlonamjerna datoteka ili neispravna komponenta ne može dosegnuti ništa mimo onoga što joj treba.
Pitanja o sigurnosti: hello@panelcraft.store.
Rad bez interneta kao polazna tačka
Dizajn, krojenje, cijene, crteži, dokumenti, izvoz za obradu i prikaz u prostoru rade lokalno. Sučelju aplikacije nije dozvoljeno učitati ništa s mreže: njegova politika sadržaja ograničava svaku vrstu izvora na samu aplikaciju, a zadana sesija otkazuje svaki zahtjev osim lokalnih datoteka, data i blob URL-ova.
Samo jedna stvar traži internet: licenca. Aplikacija se aktivira jednom, a zatim provjerava licencu online kad je provjera potrebna. Ako ne može doći do licencne usluge, nastavlja raditi kroz prelazni period od nekoliko dana, pa radionica sa slabom vezom nije prekinuta. Mrežne i serverske greške nikad ne uklanjaju postojeću licencu; to čini samo izričito odbijanje usluge.
Nikad se ne šalje nijedan projekat, cjenik, zapis o klijentu, slika dekora ni fotografija prostorije.
Gdje žive vaši podaci
Sve se čuva na vašem računaru, na mjestima koja možete naći i arhivirati.
| Podaci | Gdje | Napomene |
|---|---|---|
| Projekti | Gdje god spremite datoteku .panelcraft | Zapisuju se atomski (privremena datoteka, zatim preimenovanje). Otvaranje čita najviše 50 MB. |
| Indeks projekata, klijenti, ponude | Lokalna SQLite baza u folderu podataka aplikacije | Drži se u memoriji i sprema atomski nakon svake transakcije. Nečitljiva datoteka se preimenuje i odlaže, nikad briše. |
| Biblioteke i skladište | JSON datoteke u folderu podataka aplikacije | Čita se najviše 10 MB, provjerava se prije upotrebe. |
| Slike dekora | Folder podataka aplikacije, pohranjene prema heš vrijednosti sadržaja | Provjera prema sadržaju: 8 MB, 16 do 8192 px, 36 megapiksela po slici. |
| Fotografija za prikaz u prostoru | Smanjena kopija u folderu podataka aplikacije | Najviše 10 MB, provjera po magičnim bajtovima, folder imenovan prema hešu oznake projekta. |
| Licenca | Dvije kopije datoteke stanja licence u folderu podataka aplikacije | Pobjeđuje važeća kopija s najnovijim vremenom provjere, pa brisanje ili uređivanje jedne kopije ne resetuje sat probnog perioda. |
Izvozi napuštaju aplikaciju kao obične datoteke: PDF, CSV, DXF, SVG i slike. Vi birate gdje se zapisuju, a aplikacija nikad umjesto vas ne odlučuje o putanji.
Od čega se dizajn brani
Model prijetnji imenuje četiri protivnika. Zlonamjerna ili oštećena datoteka koju otvorite ili uvezete (projekat, CSV, biblioteka, slika ili baza) tretira se kao nepouzdan podatak. Kompromitovano sučelje, na primjer zbog greške u zavisnosti, tretira se također kao nepouzdano: ne smije moći čitati ni pisati proizvoljne datoteke, izvršavati kod u glavnom procesu, zaobići licenciranje ni doći do mreže. Lokalni korisnik koji petlja s datotekama licence ili satom obrađuje se na razumnom nivou. A lanac nabavke, npm zavisnosti i sam Electron, drži se malim i pregledanim.
Izvan opsega su napadač koji već izvršava kod kao vi, zlonamjeran operativni sistem i fizički pristup mašini. Nijedna desktop aplikacija se ne može braniti od toga, i ne tvrdimo da možemo.
Kontrole
| Oblast | Kontrola |
|---|---|
| Izolacija renderera | Izolirani renderer s izolacijom konteksta i bez Node integracije. Bez udaljenog sadržaja i bez ugrađenih web prikaza. Sandbox aplikacije uključen za svaki prozor. |
| Pozivi glavnom procesu | Svaki poziv se provjerava: pošiljalac mora biti gornji okvir upakovane stranice, svaki argument se provjerava po tipu i ograničava po veličini, nepoznata polja se odbacuju, a ekstenzije izvoza su na bijeloj listi. |
| Putanje datoteka | Sučelje nikad ne bira gdje će čitati ni pisati. Čitanja idu iz izvornih dijaloga otvaranja, pisanja iz izvornih dijaloga spremanja ili datoteka u vlasništvu aplikacije. Putanja se prihvata za spremanje samo ako ste je u ovoj sesiji odabrali u dijalogu ili je već u indeksu koji je zapisao glavni proces. |
| Ograničeni ulaz/izlaz datoteka | Čitanja su ograničena po veličini (projekat 50 MB, CSV 10 MB, pohrane 10 MB, baza 512 MB, licenca 64 KB) i moraju biti obične datoteke, ne uređaji ni folderi. Pisanja koriste nasumično privremeno ime otvoreno ekskluzivno pa preimenovano, pa se podmetnuta veza nikad ne prati. |
| Neispravan unos | Tekst projekta, biblioteke i skladišta mora se parsirati kao JSON objekt ili niz prije upotrebe. Greške parsiranja postaju čista poruka, nikad pad. |
| Politika sadržaja | Produkcijska politika: izvori skripti, stilova, slika, fontova i veza ograničeni na samu aplikaciju; bez eval; bez ugrađenih skripti i stilova; bez okvira ni objekata; bez base ni form ciljeva. |
| Renderovanje PDF-a | Skriveni prozor s isključenim JavaScriptom, vlastita sesija u memoriji koja otkazuje sve osim data URL-ova, uskraćene dozvole, uskraćena navigacija i skočni prozori te vremensko ograničenje od 60 sekundi. Markup se ponovo čisti u glavnom procesu, politika se ubacuje kao prvi element, a skripte, okviri, objekti, embed, base i link elementi i rukovaoci događajima se uklanjaju. Tekst korisnika se escapira pri generisanju dokumenata. |
| Navigacija | Prozor može navigirati samo na vlastitu stranicu; novi prozori se uvijek odbijaju; web veze se otvaraju u sistemskom pregledniku; web prikazi i zahtjevi za dozvole se odbijaju. |
| Slike | Dekori i fotografije prostorija provjeravaju se prema sadržaju (magični bajtovi i veličina u pikselima u zaglavlju), odbijaju se ako su veze, folderi ili prevelike, pohranjuju prema hešu i dekodiraju bez slabljenja politike sadržaja. |
| Baza | Svaki upit je pripremljen s vezanim parametrima. Jedino mjesto koje gradi listu kolona koristi fiksne literale. Džokeri se escapiraju, a protivnički testovi pokrivaju payload-e injekcije. |
| Učvršćivanje izvršnog okruženja | Upakovana aplikacija prebacuje fuse okruženja: node način rada je isključen, varijabla NODE_OPTIONS i inspect zastavice su isključene, šifrovanje kolačića je uključeno, može se učitati samo upakovana arhiva, a njen integritet se provjerava. |
Licenciranje bez nadzora
Licenca je potpisani token: skup tvrdnji (paket, mogućnosti, istek, ograničenje uređaja, dani prelaznog perioda) i Ed25519 potpis nad njima. Aplikacija provjerava potpis na vašem računaru javnim ključem ugrađenim u nju; privatni ključ postoji samo na licencnom serveru. Provjere mogućnosti izvode se u glavnom procesu, unutar rukovalaca koji spremaju, izvoze i čitaju podatke, pa izmijenjeno sučelje ne može uključiti mogućnosti.
Rukovanje vremenom je monotono. Aplikacija pamti posljednje vrijeme koje je vidjela i nikad ne ide unazad, pa vraćanje sata ne produžava probni ni prelazni period. Probni i prelazni period računaju se od tog sata.
Poziv licence šalje licencni ključ i identifikator uređaja, a ništa o vašim dizajnima.
Zavisnosti i testiranje
Isporučeni JavaScript je malen: React, three.js, mala biblioteka za stanje, SQLite mehanizam preveden u WebAssembly i vlastiti paketi projekta. SQLite mehanizam ne traži izvornu izgradnju, čime se uklanja jedna klasa problema izgradnje po platformi.
Sigurnosno ponašanje pokriveno je testovima: provjere pošiljaoca, provjera putanja i argumenata, prelazak direktorija i pisanje preko veza, prevelik i neispravan JSON, učvršćivanje markupa za štampu, bijela lista URL-ova i politika sadržaja; payload-i SQL injekcije; magični bajtovi dekora, veličine zaglavlja, dekompresijske bombe, prelazak direktorija, veze i neovlaštena izmjena; te testovi od kraja do kraja koji krivotvore putanje, pokušavaju nesigurne izvoze, krše politiku sadržaja, navigiraju, otvaraju prozore, šalju pozive iz stranog prozora i unose zlonamjerne datoteke i zlonamjeran PDF markup.
Ako nađete sigurnosni problem, pišite na hello@panelcraft.store s detaljima.
Program u slikama
Isprobajte na vlastitom računaru
Preuzmite PanelCraft za Windows ili macOS i provedite pravi posao kroz njega, od crteža do ponude. Probni period od 14 dana uključuje sve mogućnosti paketa Studio.
Prvo pitanja? Pišite na hello@panelcraft.store ili pogledajte česta pitanja.





