Alle Projekte

Moat

Ein kleines PHP-Gate auf dem bestehenden Hosting, das API-Schlüssel aus dem Browser fernhält und nur freigegebene Anfragen weiterleitet. Noch in Entwicklung.

KI-generiert
  • Tools

Moat ist noch in Entwicklung. Das Gate, die Kommandozeile und die Desktop-App funktionieren, Moat Cloud gibt es noch nicht. Wer es ausprobieren will, findet alles auf GitHub.

Das Problem

Viele kleine Firmen haben ihre Website auf einem gewöhnlichen Shared Hosting: PHP, ein FTP-Zugang, kein eigener Server. Sobald die Website mit einem anderen Dienst sprechen soll, wird es heikel. Ein Newsletter-Formular legt einen Kontakt in HubSpot oder Mailchimp an, ein Chat auf der Website fragt OpenAI. Dafür braucht es einen API-Schlüssel, und der darf nie im Browser landen. Wer ihn dort findet, kann im Namen der Firma Kontakte lesen, Mails verschicken oder auf ihre Rechnung KI-Anfragen stellen.

Die üblichen Auswege sind ein eigenes Backend, ein kostenpflichtiger API-Gateway-Dienst oder ein schnell geschriebenes PHP-Skript, das den Schlüssel im Klartext enthält und alles weiterleitet, was ankommt. Moat soll ein vierter Weg sein: einfach genug für ein Shared Hosting und trotzdem sicher.

Was ist Moat?

Moat legt ein kleines Gate auf das Hosting, das man schon hat: eine einzelne PHP-Datei, ohne Composer und ohne Datenbank. Die Website ruft nur noch das Gate auf, und das Gate:

  • leitet nur freigegebene Routen weiter: genaue Methode und Pfad, eine feste Zieladresse, nur HTTPS. Alles andere beantwortet es mit einem Fehler.
  • fügt den API-Schlüssel erst auf dem Weg nach draussen hinzu. Der Browser sieht ihn nie, und auch auf dem Hosting liegt er nur verschlüsselt.
  • begrenzt, was ein Besucher tun kann: Rate Limits pro Besucher und insgesamt, die Grösse einer Anfrage, erlaubte Inhaltstypen und welche Websites das Gate überhaupt aufrufen dürfen.
  • lässt sich sperren: Eine Umgebung wie «staging» oder ein einzelnes Gate wird mit einem Befehl abgeschaltet und leitet dann nichts mehr weiter.
Newsletter-Formular, das nur moat-gate.php/newsletter aufruft; darunter die Anfrage des Browsers und die Antwort des Gates (201 Created)
Das Formular spricht nur mit dem Gate. Der HubSpot-Token steht nirgends im Browser.

Sicher, auch wenn etwas schiefgeht

Bei Moat gilt eine Regel über allen anderen: Selbst wenn Moat Cloud gehackt wird, darf das Gate auf dem Hosting nicht kompromittiert werden. Daraus folgt:

  • Die Konfiguration ist reine Daten, nie Code. Das Gate führt nichts aus, was es empfängt.
  • Eine neue Konfiguration nimmt das Gate nur an, wenn sie mit dem eigenen Schlüssel signiert ist, für genau dieses Gate gilt und eine höhere Version hat als die bisherige.
  • Secrets werden auf dem eigenen Computer für ein bestimmtes Gate versiegelt und lassen sich nur dort wieder öffnen.
  • Eine lokale Richtlinie auf dem Hosting legt fest, was überhaupt erlaubt ist, und geht der Konfiguration immer vor.
  • Das Gate hat keine Admin-Oberfläche im Internet.
  • Zieladressen prüft das Gate vor dem Verbinden: keine internen Adressen, keine automatischen Weiterleitungen.
Newsletter-Formular nach vier Klicks: dreimal 201 Kontakt angelegt, beim vierten 429 rate_limited
Rate Limit von drei Anmeldungen pro Minute: Die vierte Anfrage lehnt das Gate ab.

Wie viel man Moat Cloud vertraut, entscheidet man selbst. Mit Moat Desktop oder der Kommandozeile arbeitet jedes Gate im Modus «Signiert»: Jede Änderung gibt man mit der eigenen Schlüsseldatei frei. Wenn Moat Cloud gehackt wird, kann ein Angreifer nichts ändern.

Moat Desktop

Moat Desktop ist die App für den eigenen Computer, ohne Konto und ohne Server. Jede Website ist ein Projekt, und ein Projekt ist ein Ordner mit einer moat.yaml, den man auch mit Git verwalten kann. Die App zeigt auf einen Blick, welche Routen, Gates und Umgebungen es gibt, ob alle Secrets versiegelt sind und ob ein Gate gesperrt ist.

Moat Desktop: Übersicht eines Projekts mit Projektordner, Vertrauensmodus «Signiert» und dem Stand der Konfiguration

Routen, Upstreams und Umgebungen lassen sich direkt in der App bearbeiten. Kommentare in der moat.yaml bleiben dabei erhalten, und eine Hilfe erklärt jeden Schritt. Versiegeln und Signieren laufen vorerst noch über die Kommandozeile.

Moat Desktop: Routen und Upstreams eines Projekts mit Ziel, erlaubten Websites und Rate-Limit pro Route
Moat Desktop: Gates eines Projekts, das Gate der Umgebung staging ist gesperrt

Für wen?

Für kleine Firmen, Vereine und Agenturen, deren Website auf einem Shared Hosting läuft und die ein paar Dienste anbinden wollen, ohne dafür einen eigenen Server zu betreiben. Das Gate braucht nur PHP 8.2 oder neuer mit den Erweiterungen sodium und curl. Später sollen Gates für Node und .NET dazukommen.

Was es schon gibt und was noch kommt

  • Funktioniert: das PHP-Gate (signierte Bundles, exaktes Routing, Schutz vor SSRF, CORS, Rate Limits, Sperren), die Kommandozeile moat und Moat Desktop.
  • Geplant: Moat Cloud als Dashboard, als Dienst oder selbst gehostet mit Docker oder Kubernetes; Kontingente und Budgets, damit zum Beispiel ein KI-Chat nicht mehr als einen festen Betrag pro Tag kosten kann; Versiegeln und Signieren direkt in der Desktop-App; ein Einrichtungsassistent und fertige Vorlagen für Dienste wie HubSpot oder OpenAI.

Wie es gebaut ist

  • Ein Nx-Monorepo in TypeScript. Moat Core enthält Schema, Signieren und Versiegeln genau einmal, und Kommandozeile, Desktop und später die Cloud verwenden denselben Code.
  • Das Gate ist PHP ohne Abhängigkeiten zur Laufzeit, gebaut als eine einzige Datei, geprüft mit PHPStan auf höchster Stufe und getestet auf PHP 8.2 bis 8.5.
  • Kryptografie nur mit libsodium (Ed25519-Signaturen, XChaCha20-Poly1305), in TypeScript und PHP gegen dieselben Testvektoren geprüft.
  • Moat Desktop mit Electron und Angular, die Konfiguration als YAML mit einem strengen Schema.
  • Gemeinsame Konformitätstests, die jedes Gate bestehen muss, und Sicherheitstests aus der Sicht eines Angreifers.
  • Geplant, gebaut und getestet zu einem grossen Teil zusammen mit KI-Agenten.

Code und Lizenz

Der Code liegt auf GitHub, unter der MIT-Lizenz. Man darf ihn frei nutzen, ändern und weitergeben, auch kommerziell. Fehler und Ideen sind als Issues willkommen. Die Screenshots zeigen Beispieldaten, in den Demos wurde keine echte API aufgerufen.

Alle Projekte
  • hello-eme-play

    Spiel-Engine, die jede Webseite in ein Spiel verwandelt, konfiguriert mit einem einzigen JSON. Mit Plugin für Payload CMS.

    KI-generiert
    • Tools
  • bexio-dotnet

    .NET-Bibliothek für die bexio-API (2.0 und 3.0): Rechnungen, Kontakte, Buchhaltung und mehr, mit Anmeldung per Zugriffstoken oder OAuth2.

    KI-unterstützt
    • Tools
  • Mirrorbase

    Desktop-App, die eine Datenbank von einer gespeicherten Quelle in ein Ziel kopiert. Jeder Datenbanktyp ist ein Plugin.

    KI-generiert
    • Tools