Sicherheit
AppFly schreibt und betreibt Code in deinem Auftrag. Hier steht genau, was das für deine Daten bedeutet: die Isolationsgrenze, was verschlüsselt wird, was nie erhoben wird und was mit allem passiert, wenn du gehst.
Eine App kann keine andere erreichen
Jede App erhält eine eigene Postgres-Datenbank und eine eigene Login-Rolle, die mit REVOKE CONNECT … FROM PUBLIC angelegt wird. Die Isolation ist eine Eigenschaft der Datenbank, nicht des Anwendungscodes: Eine Abfrage, die ein Agent in einer App schreibt, kann die Daten einer anderen App nicht erreichen – selbst wenn er es versucht.
Jede App läuft außerdem in einem eigenen Container mit eigenem Arbeitsbereich auf der Festplatte. Geteilt wird nur der Host.
Geheimnisse sind verschlüsselt und werden nie vollständig angezeigt
Anbieter-Schlüssel, Tokens und Umgebungsvariablen werden im Ruhezustand mit AES-256-GCM verschlüsselt. An eine Seite geht nur ein maskierter Hinweis – die letzten vier Zeichen –, sodass weder ein Bildschirm noch ein Build-Log jemals einen vollständigen Zugangsschlüssel preisgeben kann.
Schlüssel werden in die eigene .env der generierten App in deren Arbeitsbereich geschrieben – der einzige Ort, der sie lesen kann. Wir selbst vergeben genau eine Umgebungsvariable: die Datenbank-URL der App, denn die Datenbank stellen wir bereit.
Die Daten deiner Kunden gehören nicht uns
AppFly speichert Konten, Shop-Domains, Prompts und generierten Code. Es liest nie die Kunden, Bestellungen oder personenbezogenen Daten deines Shops, und die Berechtigungen, die wir bei Shopify anfragen, schließen sie nicht ein.
Shopify verlangt, dass jede App drei Compliance-Webhooks beantwortet, und wir beantworten alle drei. Die beiden Themen zu Kundendaten werden mit einem Logeintrag quittiert, der festhält, dass wir geprüft und nichts gespeichert haben – die Antwort, die ein Händler später vielleicht von uns dokumentiert braucht.
Löschen ist der Standard, kein Support-Ticket
Das Löschen einer App entfernt ihren Container, ihre Datenbank, ihre Dateien, ihr Deployment, ihren DNS-Eintrag und ihre Zugänge. Der Datenbankeintrag wird zuletzt gelöscht, damit eine halb gescheiterte Löschung wiederholt wird, statt eine verwaiste Instanz weiterlaufen zu lassen.
Die Deinstallation in Shopify löscht alles, was zu deinem Shop gehört, innerhalb von 48 Stunden. Ein geplanter Job läuft alle fünf Minuten und erledigt, was der Deinstallations-Handler nicht abschließen konnte – eine unterbrochene Löschung wird so nie wieder zu einer laufenden App.
Beim Abmelden wird die Session serverseitig widerrufen. Das Schließen deines Kontos löscht alles, was in der Datenschutzerklärung (auf Englisch) steht.
Grenzen, die wir einhalten
Jede Anfrage an eine angemeldete Seite ist authentifiziert, und API-Routen beantworten einen nicht authentifizierten Aufruf mit einem lesbaren 401 statt mit einer HTML-Anmeldeseite.
Abrechnungs-Webhooks sind signiert und werden gegen den unveränderten Request-Body geprüft. Ein Deployment ohne konfiguriertes Webhook-Secret liefert für den Endpunkt 404 – unsigniert heißt nicht authentifiziert, nicht offen – und eine falsche Signatur ein 401.
Die Betreiberkonsole ist durch ein Passwort und ein signiertes Cookie geschützt, und ihre privilegierten Host-Operationen sind eine feste Liste von Funktionen ohne generische Shell. Sie ist von der öffentlichen Website aus nicht erreichbar, und robots.txt schließt sie aus.
Eine Schwachstelle melden
Schick sie an [email protected] – mit genug Details, um sie nachzuvollziehen, und einer Einschätzung der Auswirkungen. Wir bestätigen den Eingang und sagen dir, was wir unternehmen. Bitte gib uns angemessen Zeit, bevor du sie veröffentlichst, und teste nicht gegen Daten anderer Kunden.
Für alles, was kein Sicherheitsthema ist, ist [email protected] die richtige Adresse.