pad.software
Kontakt

Produktionsreife-Check · Beispiel

So sieht ein Befund aus.

Ein erfundener Prototyp, geprüft wie ein echter. Aufbau und Tonfall wie im Bericht, den ihr bekommt.

Beispiel mit erfundenem Gegenstand. Kein Kunde, kein echtes Projekt.

befund · ki-prototyp4 Befunde
const supabase = createClient(
import.meta.env.VITE_SUPABASE_URL,
'eyJhbGciOiJIUzI1NiIs…', // service_role
);
export async function saveLead(form) {
if (!form.email.includes("@")) return;
await supabase.from('leads').insert(form);
}
  • kritischService-Role-Key im Client-BundleZ. 3
  • hochInsert ohne RechteprüfungZ. 8
  • hochValidierung nur im BrowserZ. 7
  • mittelNur die Hälfte kommt aus der UmgebungZ. 2
Aufgezeichnetes Beispiel mit vorbereiteten Daten
steckbrief · beispielProduktionsreife-Check, 3 Werktage
Gegenstand
Anfrage-Portal: Formular für Kundenanfragen mit Übersicht für den Vertrieb, gebaut mit Lovable, Daten in Supabase.
Umfang
rund 2.400 Zeilen TypeScript, 14 Komponenten, 3 Tabellen
Einsatz
Soll öffentlich auf der Website laufen; speichert Name, E-Mail, Telefon und Freitext.
Befunde
2 kritisch4 hoch3 mittel

Urteil · Beispiel

Härtbar.

Das Datenmodell ist schlicht und passt zum Zweck. Die Befunde liegen an den Rändern: Schlüssel, Rechte, Validierung, Betrieb. Nichts davon verlangt, das Fundament neu zu bauen.

Die beiden kritischen Befunde sind in einem halben Tag behoben und sollten es vor allem anderen werden, auch wenn das Portal noch gar nicht öffentlich ist.

6–9 PersonentageAufwandsspanne für die Härtung. Summe der Einzelmaßnahmen: 7 Tage, dazu Abstimmung.

Befundliste

Sortiert nach Schweregrad, nicht nach Regelverstoß.

Was sich nachstellen ließ, ist nachgestellt. Was nicht, steht als Verdacht drin.

  1. kritischB01

    Service-Role-Key im Client-Bundle

    Sicherheitsrc/lib/supabase.ts:3nachgestellt

    Befund

    Der Supabase-Schlüssel mit Administratorrechten steht im Frontend-Code und wird mit dem JavaScript an jeden Besucher ausgeliefert.

    Warum es zählt

    Wer die Seite öffnet, kann alle Anfragen lesen, ändern und löschen. Nachgestellt: Mit dem Schlüssel aus dem ausgelieferten Bundle ließ sich die Tabelle vollständig abrufen.

    MaßnahmeSchlüssel sofort rotieren, im Client nur den Anon-Key verwenden, Schreibzugriffe über eine Edge Function.≈ 0,5 Tage

  2. kritischB02

    Export-Endpunkt ohne Anmeldung erreichbar

    Sicherheitsrc/pages/api/export.ts:12nachgestellt

    Befund

    Die CSV-Ausgabe für den Vertrieb prüft nicht, wer sie aufruft. Die Route ist nur nicht verlinkt.

    Warum es zählt

    Nicht verlinkt ist nicht geschützt. Nachgestellt: Ein direkter Aufruf ohne Anmeldung lieferte den kompletten Export.

    MaßnahmeAnmeldung erzwingen, Zugriff auf die Vertriebsrolle beschränken.≈ 0,5 Tage

  3. hochB03

    Insert ohne Rechteprüfung

    Sicherheitsrc/lib/leads.ts:8nachgestellt

    Befund

    Neue Anfragen werden mit Administratorrechten geschrieben; Row Level Security ist für die Tabelle abgeschaltet.

    Warum es zählt

    Selbst nach dem Tausch des Schlüssels kann jeder beliebige Datensätze anlegen. Nachgestellt mit einem direkten Request.

    MaßnahmeRow Level Security einschalten, eine Policy nur für das Anlegen eigener Anfragen.≈ 1 Tag

  4. hochB04

    Validierung nur im Browser

    Sicherheitsrc/lib/leads.ts:7nachgestellt

    Befund

    Ob die E-Mail-Adresse gültig ist und Felder befüllt sind, prüft nur das Formular.

    Warum es zählt

    Ein direkter Request umgeht die Prüfung. In der Tabelle landen leere und beliebig lange Einträge.

    MaßnahmeDieselben Regeln serverseitig in der Edge Function, Längenbegrenzung in der Datenbank.≈ 0,5 Tage

  5. hochB05

    Analyse-Skript liest Formularfelder mit

    Datenschutzindex.html:18nachgestellt

    Befund

    Ein eingebundenes Session-Recording-Skript zeichnet Eingaben auf, auch in den Feldern für Telefon und Freitext.

    Warum es zählt

    Personenbezogene Daten gehen ohne Einwilligung an einen Anbieter in den USA. Nachgestellt im Netzwerkprotokoll des Browsers.

    MaßnahmeSkript entfernen oder Formularfelder ausnehmen und nur nach Einwilligung laden; Auftragsverarbeitung klären.≈ 0,5 Tage

  6. hochB06

    Keine Datensicherung

    Skalierung & BetriebSupabase-Projekt, TarifVerdacht

    Befund

    Das Projekt läuft im kostenlosen Tarif. Dort gibt es keine automatische Sicherung mit Wiederherstellung auf einen Zeitpunkt.

    Warum es zählt

    Ein versehentliches Löschen ist endgültig. Verdacht: Ein manueller Export ist nicht dokumentiert, ließ sich im Zeitrahmen aber nicht ausschließen.

    MaßnahmeBezahlten Tarif mit Sicherung wählen oder nächtlichen Export einrichten, Wiederherstellung einmal erproben.≈ 0,5 Tage

  7. mittelB07

    Kein Löschkonzept

    DatenschutzTabelle leadsnachgestellt

    Befund

    Anfragen bleiben unbegrenzt gespeichert. Es gibt keinen Weg, eine einzelne Anfrage auf Wunsch zu löschen oder Auskunft zu geben.

    Warum es zählt

    Auskunfts- und Löschpflichten lassen sich so nur von Hand und unvollständig erfüllen.

    MaßnahmeAufbewahrungsfrist festlegen, automatisch löschen, Lösch- und Auskunftsfunktion für den Vertrieb.≈ 1 Tag

  8. mittelB08

    Fehler landen nirgends

    Skalierung & Betriebsrc/lib/leads.ts:9nachgestellt

    Befund

    Schlägt das Speichern fehl, sieht der Besucher eine Erfolgsmeldung, und niemand erfährt davon.

    Warum es zählt

    Anfragen gehen still verloren. Auffallen würde das erst, wenn ein Kunde nachfragt.

    MaßnahmeFehler im Formular anzeigen, protokollieren und bei Häufung benachrichtigen.≈ 0,5 Tage

  9. mittelB09

    Keine Tests

    Tragfähigkeitgesamtes Repositorynachgestellt

    Befund

    Es gibt keinen einzigen automatisierten Test, auch nicht für das Speichern einer Anfrage.

    Warum es zählt

    Jede der Maßnahmen oben ist eine Änderung ohne Sicherheitsnetz. Der Prototyp ist klein genug, dass sich das noch billig nachholen lässt.

    MaßnahmeTests für die Kernwege: Anfrage anlegen, abweisen, exportieren, löschen.≈ 2 Tage

Nicht geprüft

Was dieser Bericht nicht sagt.

  • Rechtliche Bewertung der Datenschutzerklärung. Wir benennen, wo juristischer Rat nötig ist.
  • Lastverhalten und Kosten unter Nutzung. Das wäre Teil des Audits.
  • Penetrationstest der Supabase-Plattform selbst.

Danach

Ein Gespräch über das Ergebnis.

Zum Bericht gehört ein Termin, in dem wir ihn durchgehen. Was ihr danach macht, entscheidet ihr: selbst härten, uns beauftragen oder den Prototyp verwerfen.

Dieses Beispiel ist ein Produktionsreife-Check (3 Werktage, 3.000 € netto). Das Produktionsreife-Audit geht für größere Anwendungen weiter: DSGVO-Betrachtung mit Zuarbeit für euer Verarbeitungsverzeichnis, Last- und Kostenverhalten unter realistischer Nutzung und mehr.

Euer Prototyp als Nächstes?

Repo-Zugang genügt. Den Rest klären wir im Gespräch.