SkywardOpsDokumentation

Sicherheit

In der Datenbank erzwungene Regeln, der Demo-Schutz, sichere Weiterleitungen, der URL-Schutz und signierte Gewährungen des Shops.

Regeln in der Datenbank

Die wichtigsten Regeln erzwingt Postgres (Sicherheit auf Zeilenebene, Spaltenrechte, Trigger und Prüfbeschränkungen), sodass ein Fehler in der App oder ein Agent, der sich falsch verhält, sie nicht brechen kann. Kurz gesagt:

  • Den Abrechnungszustand schreibt nur der Shop.
  • Module, die gesperrt, deaktiviert oder auf none gesetzt sind, liefern keine Zeilen.
  • Starten, Freigeben, Abbrechen und das Senden von Fahrzeugbefehlen brauchen publish, werden als der echte Aufrufer festgehalten und sind für Agenten niemals möglich.
  • Kein Start mit einer stillgelegten Einheit, einer zu geringen Akkureserve oder einer Höhe über dem Limit ohne Ausnahmegenehmigung.
  • Die Freigabe zum Einsatz braucht eine zweite Person (Vier-Augen-Prinzip).
  • Flugprotokolle sind nur anhängbar; Benachrichtigungen können nur als gelesen markiert werden; Auditeinträge lassen sich nicht fälschen.
  • Nur Eigentümer und Administratoren ändern den Zugriff; Agenten gehen niemals über edit hinaus.

Die vollständige Liste, wie jede Regel erzwungen wird, steht unter Invarianten. Jede Regel hat einen Test, der versucht, sie zu brechen.

Demo-Schutz

Der Demomodus hat keine Anmeldung und darf daher niemals versehentlich eine Produktionsbereitstellung ausliefern. Wenn DEMO_MODE=true und NODE_ENV=production sind, bricht die App beim Start ab, außer ALLOW_DEMO_IN_PROD=true ist ausdrücklich gesetzt.

Sichere Weiterleitungen

Jeder Parameter next oder zur Rückkehr läuft durch safeRedirect. Er akzeptiert nur relative Pfade desselben Ursprungs: genau ein führender Schrägstrich, kein //, kein umgekehrter Schrägstrich, kein Schema und keine Steuerzeichen. Alles andere fällt auf /app zurück. Das verhindert offene Weiterleitungen nach der Anmeldung.

URL-Schutz

Von Nutzenden angegebene URLs, die der Server abrufen würde, laufen durch einen URL-Schutz, der private Adressen, Loopback-Adressen, link-lokale Adressen und andere reservierte Adressen ablehnt. In dieser Version ist die einzige solche URL das Push-Ziel des Shops, und es kommt aus der Konfiguration.

Signierte Gewährungen des Shops

Der Demo-Shop auf der Website signiert jede Berechtigung mit HMAC-SHA256 über einen kanonischen JSON-Körper (Bestellung, Arbeitsbereich, Module, Tarif, KI-Zusatzmodul, Periodenende und Ausgabezeitpunkt), mit einem gemeinsamen Geheimnis von mindestens 16 Zeichen. Die App:

  1. prüft das Format der Signatur,
  2. lehnt Gewährungen ab, die mehr als 5 Minuten vor oder nach jetzt ausgestellt wurden (Wiederholungsfenster),
  3. berechnet die Signatur neu und vergleicht sie in konstanter Zeit,
  4. schreibt erst danach die Abrechnungsspalten mit der Service-Rolle.

Eine Gewährung, die an irgendeinem Schritt scheitert, ändert nichts.

Geheimnisse

In dieser Version werden keine echten Schlüssel gebraucht oder verwendet. Dateien .env werden von Git ignoriert. Das Passwort der lokalen Datenbank gilt nur lokal.

On this page