Sicherheit und Daten: Ihre Arbeit bleibt lokal

PanelCraft ist eine Desktop-Anwendung, die zuerst offline arbeitet. Ihre Projekte, Preislisten, Kundendaten und Dekorbilder liegen auf Ihrem eigenen Rechner, und die Anwendung ist so gebaut, dass eine feindliche Datei oder eine fehlerhafte Komponente nicht über das hinausreicht, was sie braucht.

Fragen zur Sicherheit: hello@panelcraft.store.

Von Grund auf offline zuerst

Konstruktion, Zuschnitt, Preise, Zeichnungen, Dokumente, Bearbeitungsexport und Raumansicht laufen alle lokal. Die Oberfläche der Anwendung darf nichts aus dem Netzwerk laden: Ihre Inhaltsrichtlinie beschränkt jede Art von Quelle auf die Anwendung selbst, und die Standardsitzung bricht jede Anfrage ab außer lokalen Dateien, Daten- und Blob-URLs.

Nur eines braucht das Internet: die Lizenz. Die Anwendung wird einmal aktiviert und prüft die Lizenz danach online, wenn eine Prüfung fällig ist. Erreicht sie den Lizenzdienst nicht, arbeitet sie eine Karenzzeit von mehreren Tagen weiter, sodass eine Werkstatt mit schlechter Verbindung nicht unterbrochen wird. Netzwerk- und Serverfehler entfernen nie eine bestehende Lizenz; nur eine ausdrückliche Ablehnung durch den Dienst tut das.

Kein Projekt, keine Preisliste, kein Kundendatensatz, kein Dekorbild und kein Raumfoto wird je hochgeladen.

Wo Ihre Daten liegen

Alles wird auf Ihrem Rechner gespeichert, an Orten, die Sie finden und sichern können.

DatenOrtHinweise
ProjekteWo Sie die .panelcraft-Datei speichernAtomar geschrieben (temporäre Datei, dann Umbenennen). Beim Öffnen werden höchstens 50 MB gelesen.
Projektindex, Kunden, AngeboteEine lokale SQLite-Datenbank im Datenordner der AnwendungIm Speicher gehalten und nach jeder Transaktion atomar gespeichert. Eine unlesbare Datei wird beiseite umbenannt, nie gelöscht.
Bibliotheken und LagerJSON-Dateien im Datenordner der AnwendungEs werden höchstens 10 MB gelesen, vor der Verwendung geprüft.
DekorbilderDer Datenordner der Anwendung, nach Inhalts-Hash gespeichertNach Inhalt geprüft: 8 MB, 16 bis 8192 px, 36 Megapixel je Bild.
Foto der RaumansichtEine verkleinerte Kopie im Datenordner der AnwendungHöchstens 10 MB, anhand der Magic Bytes geprüft, Ordner nach einem Hash der Projektkennung benannt.
LizenzZwei Kopien einer Lizenzstatusdatei im Datenordner der AnwendungDie gültige Kopie mit der neuesten Prüfzeit gewinnt, das Löschen oder Ändern einer Kopie setzt also die Testuhr nicht zurück.

Exporte verlassen die Anwendung als einfache Dateien: PDF, CSV, DXF, SVG und Bilder. Sie wählen, wohin sie geschrieben werden, und die Anwendung bestimmt nie einen Pfad für Sie.

Wogegen das Design schützt

Das Bedrohungsmodell nennt vier Gegner. Eine bösartige oder beschädigte Datei, die Sie öffnen oder importieren (ein Projekt, eine CSV, eine Bibliothek, ein Bild oder eine Datenbank), wird als nicht vertrauenswürdige Daten behandelt. Eine kompromittierte Oberfläche, etwa durch einen Fehler in einer Abhängigkeit, gilt ebenfalls als nicht vertrauenswürdig: Sie darf keine beliebigen Dateien lesen oder schreiben, keinen Code im Hauptprozess ausführen, die Lizenzierung nicht umgehen und das Netzwerk nicht erreichen. Ein lokaler Benutzer, der Lizenzdateien oder die Uhr manipuliert, wird in angemessenem Umfang abgefangen. Und die Lieferkette, die npm-Abhängigkeiten und Electron selbst, wird klein gehalten und geprüft.

Nicht abgedeckt sind ein Angreifer, der bereits Code als Sie ausführt, ein bösartiges Betriebssystem und physischer Zugriff auf den Rechner. Dagegen kann sich keine Desktop-Anwendung verteidigen, und wir behaupten es nicht.

Die Schutzmaßnahmen

BereichMaßnahme
Isolierung des RenderersRenderer in einer Sandbox mit Kontextisolierung und ohne Node-Integration. Keine Fremdinhalte und keine eingebetteten Webansichten. Anwendungs-Sandbox für jedes Fenster aktiviert.
Aufrufe an den HauptprozessJeder Aufruf wird geprüft: Der Absender muss der oberste Frame der ausgelieferten Seite sein, jedes Argument wird auf Typ und Größe geprüft, unbekannte Felder werden verworfen, und Exportendungen stehen auf einer Positivliste.
DateipfadeDie Oberfläche wählt nie, wo gelesen oder geschrieben wird. Gelesen wird aus nativen Öffnen-Dialogen, geschrieben in nativen Speichern-Dialogen oder in Dateien der Anwendung. Ein Pfad wird zum Speichern nur akzeptiert, wenn Sie ihn in dieser Sitzung in einem Dialog gewählt haben oder er schon im vom Hauptprozess geschriebenen Index steht.
Begrenzte Datei-Ein-/AusgabeLesen ist größenbegrenzt (Projekt 50 MB, CSV 10 MB, Speicher 10 MB, Datenbank 512 MB, Lizenz 64 KB) und nur für reguläre Dateien erlaubt, nicht für Geräte oder Verzeichnisse. Geschrieben wird mit einem zufälligen temporären Namen, exklusiv geöffnet und dann umbenannt, sodass ein untergeschobener Link nie verfolgt wird.
Fehlerhafte EingabenProjekt-, Bibliotheks- und Lagertext muss vor der Verwendung als JSON-Objekt oder -Array gelesen werden können. Lesefehler werden zu einer sauberen Meldung, nie zu einem Absturz.
InhaltsrichtlinieRichtlinie der Produktivversion: Skript, Stil, Bild, Schrift und Verbindungen auf die Anwendung selbst beschränkt; kein eval; kein Inline-Skript oder -Stil; keine Frames oder Objekte; keine Base- oder Formularziele.
PDF-ErzeugungEin verborgenes Fenster mit abgeschaltetem JavaScript, einer eigenen Sitzung im Speicher, die alles außer Daten-URLs abbricht, verweigerten Berechtigungen, verweigerter Navigation und verweigerten Pop-ups und einem Zeitlimit von 60 Sekunden. Das Markup wird im Hauptprozess erneut bereinigt, eine Richtlinie wird als erstes Element eingefügt, und Skripte, Frames, Objekte, Embeds, Base- und Link-Elemente und Ereignisbehandler werden entfernt. Benutzertext wird beim Erzeugen der Dokumente maskiert.
NavigationDas Fenster kann nur zu seiner eigenen Seite navigieren; neue Fenster werden immer abgelehnt; Weblinks öffnen im Systembrowser; Webansichten und Berechtigungsanfragen werden abgelehnt.
BilderDekor- und Raumfotos werden nach Inhalt geprüft (Magic Bytes und Pixelgröße im Header), abgelehnt, wenn sie Links, Verzeichnisse oder zu groß sind, unter einem Hash gespeichert und dekodiert, ohne die Inhaltsrichtlinie zu lockern.
DatenbankJede Abfrage ist eine vorbereitete Anweisung mit gebundenen Parametern. Die eine Stelle, die eine Spaltenliste baut, verwendet feste Literale. Platzhalterzeichen werden maskiert, und gegnerische Tests decken Injection-Payloads ab.
Härtung der LaufzeitDie ausgelieferte Anwendung schaltet die Laufzeit-Fuses um: Der Node-Laufmodus ist aus, die Variable NODE_OPTIONS und die Inspect-Schalter sind aus, die Cookie-Verschlüsselung ist an, nur das ausgelieferte Archiv kann geladen werden, und seine Integrität wird geprüft.

Lizenzierung ohne Überwachung

Eine Lizenz ist ein signiertes Token: eine Reihe von Angaben (Tarif, Funktionen, Ablauf, Geräteobergrenze, Karenztage) und eine Ed25519-Signatur darüber. Die Anwendung prüft die Signatur auf Ihrem Rechner mit einem eingebauten öffentlichen Schlüssel; der private Schlüssel liegt nur auf dem Lizenzserver. Funktionsprüfungen laufen im Hauptprozess, in den Routinen, die Daten speichern, exportieren und lesen, sodass eine veränderte Oberfläche keine Funktionen freischalten kann.

Die Zeitbehandlung ist monoton. Die Anwendung merkt sich die späteste Zeit, die sie gesehen hat, und geht nie zurück, sodass das Zurückstellen der Uhr eine Testphase oder Karenzzeit nicht verlängert. Testphase und Karenzzeit werden von dieser Uhr aus gezählt.

Der Lizenzaufruf sendet einen Lizenzschlüssel und eine Gerätekennung und nichts über Ihre Entwürfe.

Abhängigkeiten und Tests

Das ausgelieferte JavaScript ist klein: React, three.js, eine kleine State-Bibliothek, eine zu WebAssembly kompilierte SQLite-Engine und die eigenen Pakete des Projekts. Die SQLite-Engine braucht keinen nativen Build, was eine ganze Klasse von Build-Problemen je Plattform beseitigt.

Das Sicherheitsverhalten ist durch Tests abgedeckt: Absenderprüfungen, Pfad- und Argumentprüfung, Traversal und Schreiben über Links, überlanges und fehlerhaftes JSON, Härtung des Druck-Markups, die URL-Positivliste und die Inhaltsrichtlinie; SQL-Injection-Payloads; Magic Bytes, Header-Größen, Dekompressionsbomben, Traversal, Links und Manipulation bei Dekoren; und Ende-zu-Ende-Tests, die Pfade fälschen, unsichere Exporte versuchen, die Inhaltsrichtlinie verletzen, navigieren, Fenster öffnen, Aufrufe aus einem fremden Fenster senden und feindliche Dateien und feindliches PDF-Markup einspeisen.

Wenn Sie ein Sicherheitsproblem finden, schreiben Sie mit den Einzelheiten an hello@panelcraft.store.

Das Programm in Bildern

Diagramm: Eine Projektdatei speist abgeleitete Teile, einen Zuschnittplan, ein Angebot und Unterlagen.
Eine Datei, alles abgeleitet: Produkt.
Der Dialog Werkstattpaket mit acht geschriebenen Dateien.
Das Werkstattpaket: Unterlagen.
Die Materialbibliothek mit Dekor-Vorschaubildern, Tafelgrößen und Preisen.
Ihre Platten und Preise: Bibliotheken.
Der Startbildschirm von PanelCraft mit Neues Projekt, Datei öffnen, Möbelarten und Vorlagen.
Der Startbildschirm: Benutzerhandbuch.
L-förmiger Schreibtisch mit Nussbaum-Platte, Stützen in heller Eiche und Schubladenelement, mit eingeblendeten Gesamtmaßen.
Freie Konstruktion: Konstruktion.
Der Reiter Zuschnitt mit zwei verschachtelten Tafeln eines Kleiderschranks mit Schiebetüren, Verschnitt und Teilemaßen.
Zuschnittpläne: Zuschnitt und Verschachtelung.

Probieren Sie es auf Ihrem eigenen Rechner

Laden Sie PanelCraft für Windows oder macOS herunter und führen Sie einen echten Auftrag damit durch, von der Zeichnung bis zum Angebot. Die 14-tägige Testphase enthält alle Studio-Funktionen.

Erst Fragen? Schreiben Sie an hello@panelcraft.store oder lesen Sie die FAQ.