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.
| Daten | Ort | Hinweise |
|---|---|---|
| Projekte | Wo Sie die .panelcraft-Datei speichern | Atomar geschrieben (temporäre Datei, dann Umbenennen). Beim Öffnen werden höchstens 50 MB gelesen. |
| Projektindex, Kunden, Angebote | Eine lokale SQLite-Datenbank im Datenordner der Anwendung | Im Speicher gehalten und nach jeder Transaktion atomar gespeichert. Eine unlesbare Datei wird beiseite umbenannt, nie gelöscht. |
| Bibliotheken und Lager | JSON-Dateien im Datenordner der Anwendung | Es werden höchstens 10 MB gelesen, vor der Verwendung geprüft. |
| Dekorbilder | Der Datenordner der Anwendung, nach Inhalts-Hash gespeichert | Nach Inhalt geprüft: 8 MB, 16 bis 8192 px, 36 Megapixel je Bild. |
| Foto der Raumansicht | Eine verkleinerte Kopie im Datenordner der Anwendung | Höchstens 10 MB, anhand der Magic Bytes geprüft, Ordner nach einem Hash der Projektkennung benannt. |
| Lizenz | Zwei Kopien einer Lizenzstatusdatei im Datenordner der Anwendung | Die 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
| Bereich | Maßnahme |
|---|---|
| Isolierung des Renderers | Renderer 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 Hauptprozess | Jeder 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. |
| Dateipfade | Die 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-/Ausgabe | Lesen 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 Eingaben | Projekt-, 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. |
| Inhaltsrichtlinie | Richtlinie 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-Erzeugung | Ein 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. |
| Navigation | Das Fenster kann nur zu seiner eigenen Seite navigieren; neue Fenster werden immer abgelehnt; Weblinks öffnen im Systembrowser; Webansichten und Berechtigungsanfragen werden abgelehnt. |
| Bilder | Dekor- 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. |
| Datenbank | Jede 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 Laufzeit | Die 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
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.





