1Ausgangslage: Ein bewährtes System mit gefährlichen Altlasten
Der Verband koordiniert jährliche Wettkämpfe, bei denen Vereine ihre Nachwuchsteams — gestaffelt nach Leistungsstufen — melden, Wertungsrichter:innen die Leistungen bepunkten und am Ende öffentliche Ranglisten entstehen. Die dafür genutzte Software stammte aus den Jahren 2014–2018, war ein reines Ein-Personen-Projekt ohne Versionskontrolle und lief bis zuletzt produktiv — inklusive aktueller Anmeldedaten der laufenden Saison.
Eine unabhängige Code- und Sicherheitsanalyse vor Projektstart zeigte: Das System funktionierte äußerlich zuverlässig, war innen aber ein erhebliches Risiko — insbesondere weil es personenbezogene Daten von Kindern verarbeitet.
- Gespeichertes XSS über Teilnehmernamen — Angriffsfläche bis in Admin-Sessions
- Datenbank-Zugangsdaten im Klartext im Code
- Ca. 90% aller Datenbankzugriffe ohne Prepared Statements
- Kein CSRF-Schutz bei kritischen Aktionen (z.B. Team löschen)
- "Passwort vergessen"-Ablauf technisch defekt
- Kernlogik 3–4× dupliziert — jeder Fix musste mehrfach gemacht werden
- Keine Protokollierung, wer wann welche Wertung geändert hat
- Eine Tabelle mit über 70 Spalten für Stamm-, Melde- und Wertungsdaten
- Durchgängiges HTML-Escaping — strukturell kein XSS mehr möglich
- Zugangsdaten ausschließlich über `.env`, nie im Code
- 100% Prepared Statements (PDO) für sämtliche Datenbankzugriffe
- CSRF-Schutz zentral im Router auf jedem POST-Request erzwungen
- Passwort-Aktivierung/-Reset über zeitlich begrenzten Einmal-Link
- Eine einzige, saubere Codebasis statt paralleler Kopien
- Lückenloses Audit-Log für alle sicherheitsrelevanten Aktionen
- Normalisiertes Datenmodell (Vereine, Starter, Teams, Wertungen getrennt)
2Analyse & Entscheidung: Neu bauen statt flicken
Die erste Frage war nicht technischer, sondern strategischer Natur: Lässt sich das bestehende System gezielt absichern, oder braucht es einen Neuanfang? Angesichts der strukturellen Probleme — Code-Duplizierung, fehlende Trennung von Logik und Darstellung, kein einziger automatisierter Test — fiel die Entscheidung eindeutig auf eine vollständige Neuentwicklung. Wiederverwendet wurde dabei bewusst kein einziger Codebestandteil, wohl aber das komplette fachliche Wissen: das Punktesystem, die Stufen-Gewichtung, der Leistungskatalog und das Rollenmodell.
Eine zweite, ebenso wichtige Entscheidung betraf die Architektur der Neuentwicklung selbst:
| Kriterium | Altsystem | Neuentwicklung |
|---|---|---|
| Datenbankzugriff | Gemischt PDO/mysqli, manuelles Escaping | Ausschließlich PDO mit Prepared Statements |
| Ausgabe (HTML) | Escaping nur in 3 von 34 Dateien | Zentrale Escaping-Funktion in jedem Template |
| Zugriffskontrolle | Rollenprüfung kopiert in 20+ Dateien | Zentrale Middleware, Rollen aus der Datenbank |
| Nachvollziehbarkeit | Ein Zeitstempel, keine Historie | Vollständiges Audit-Log je Aktion |
| Angriffsfläche | Groß, unstrukturiert gewachsen | Bewusst minimal gehalten |
Für den tatsächlichen Funktionsumfang — Login, Rollen, Vereins-/Starterverwaltung, Wettkampf-/Team-/Wertungsabwicklung — wäre ein volles Framework wie Symfony oder Laravel deutlich mehr, als gebraucht wird. Entschieden wurde stattdessen für einen schlanken, selbstgeschriebenen Router (rund 80 Zeilen), PDO direkt und PHP-Templates mit konsequentem Escaping. Das hält die Angriffsfläche klein und jede Zeile Code nachvollziehbar — ein Framework-Wechsel bliebe bei künftigem Wachstum jederzeit möglich, ohne die aufgebaute Datenbank oder Fachlogik zu verwerfen.
3Umsetzung: 8 Wochen, von der Fachlogik bis zum Go-Live
Da das Altsystem während der laufenden Saison weiterlief, entstand die Neuentwicklung parallel und wurde erst zum Saisonwechsel produktiv geschaltet — kein Druck durch einen harten Umstiegstermin mitten im Wettkampfbetrieb.
Punktesystem, Rollenmodell und Datenfelder dokumentiert
Vollständige Analyse des Altsystems: Punkteberechnung je Leistung, Stufen-Gewichtung, die vier Nutzerrollen, sämtliche Datenfelder und Validierungsregeln wurden als fachliche Spezifikation festgehalten — unabhängig vom bestehenden, nicht wiederverwendbaren Code. Parallel dazu ein Sicherheitsaudit, das alle kritischen Lücken im Altsystem benannte.
✓ Fachlogik & Risiken vollständig dokumentiertNormalisiertes Schema, Auth, Rollen, CSRF, Router
Neues, normalisiertes Datenbankschema (getrennte Tabellen für Vereine, Starter, Wettkämpfe, Teams, Wertungen statt einer 70-Spalten-Tabelle). Aufbau des technischen Fundaments: eigener Router, Session- und CSRF-Schutz, Passwort-Hashing mit automatischem Rehashing, Rate-Limiting auf Login und Passwort-Reset.
✓ Sicherheitsfundament steht, Rollen datenbankbasiertFachprozesse für Vereine, Admin und Wettkampfleitung
Verwaltung von Vereinen und Startern, Wettkampfanlage inkl. Ausschreibung-Upload (mit echter Dateityp-Prüfung, Ablage außerhalb des Webroots) und automatischem Mailversand an alle Vereinsbetreuer:innen. Team-Meldung durch die Vereine inklusive der kompletten Melderegeln aus dem Altsystem.
✓ Meldeschluss jetzt serverseitig durchgesetztLive-Fortschritts-Dashboard und Ranglisten mit Excel-Export
Wertungserfassung für Wertungsrichter:innen mit Ampel-Status je Team, Live-Fortschritts-Dashboard für die Wettkampfleitung während des laufenden Wertungstags, sowie automatische Ergebnisberechnung mit öffentlichen Ranglisten und Excel-Export je Wettkampf.
✓ Jede Korrektur lückenlos im Audit-LogUmstieg zum Saisonwechsel, ohne Datenverlust
Übernahme der Bestandsdaten (Vereine, Starter-Stammdaten) in das neue Schema, Einrichtung des ersten Admin-Zugangs, kurze Einschulung für Admin, Wettkampfleitung und Wertungsrichter:innen anhand eines eigens erstellten, nicht-technischen Benutzerhandbuchs. Altsystem danach endgültig abgeschaltet.
✓ Produktiv seit dem Saisonstart · 0 DatenverlustPHP 8.4 · PDO/MySQL (MariaDB) mit ausschließlich Prepared Statements · eigener schlanker Router · PHPMailer für SMTP-Mailversand · PhpSpreadsheet für Excel-Export · zentrales CSRF- & Session-Fundament · Audit-Log · bcrypt-Passwort-Hashing mit automatischem Rehashing · Security-Header (CSP, HSTS, X-Frame-Options)
4Ergebnis: Was sich konkret verändert hat
Seit dem Saisonstart läuft die Plattform im produktiven Wettkampfbetrieb — Anmeldung, Wertung und Ergebnisermittlung laufen vollständig über das neue System, ohne dass ein einziger Datensatz aus dem Altsystem verloren ging.
Was Vereine und Wertungsrichter:innen täglich spüren
- Team-Meldung mit klarer Führung durch die Melderegeln statt Rätselraten im alten Formular
- Wertungserfassung mit sofortiger Kontrolle über die Ampel-Anzeige je Team
- Kein Passwort wird je per E-Mail verschickt — Aktivierung und Reset laufen über einen sicheren Link
- Eigenes Passwort jederzeit selbst änderbar unter „Mein Konto"
Was Wettkampfleitung und Verband spüren
- Live-Dashboard zeigt während der Wertung den tatsächlichen Fortschritt aller Teams
- Öffentliche Ranglisten inklusive Excel-Export, sobald ein Wettkampf abgeschlossen ist
- Vollständiges Audit-Log: Wer hat wann welche Wertung angelegt, geändert oder korrigiert
- Keine Sorge mehr um ungeschützt gespeicherte Daten von jugendlichen Sportler:innen
- Ausführliches, nicht-technisches Benutzerhandbuch für alle vier Rollen
„Wir wussten, dass unsere alte Lösung in die Jahre gekommen war — wie viel dabei tatsächlich auf dem Spiel stand, war uns vorher nicht bewusst. Jetzt läuft der komplette Wettkampf digital, sicher und nachvollziehbar, und wir müssen uns um nichts mehr sorgen."
— Wettkampfleitung, anonymisierter Kunde (gemeinnütziger Sportverband)5Lessons Learned & Empfehlungen
Dieser Fall ist kein Einzelfall — viele Vereine und Verbände betreiben seit Jahren gewachsene Individualsoftware, die einmal von einer engagierten Einzelperson gebaut wurde und seither "einfach läuft". Eine Neuentwicklung lohnt sich besonders, wenn folgende Punkte zutreffen:
- Die Software wird von genau einer Person verstanden und gepflegt
- Es gibt keine Versionskontrolle, keine Tests, keine Dokumentation
- Personenbezogene oder besonders schützenswerte Daten sind betroffen (z.B. von Minderjährigen)
- Änderungen erfordern regelmäßig Anpassungen an mehreren Kopien derselben Logik
- Niemand kann mit Sicherheit sagen, wer wann welche Daten geändert hat
Fachlogik statt Code übernehmen · Parallelbetrieb bis zum Saisonwechsel, kein erzwungener Stichtag · Bewusst schlanke Architektur statt Overengineering · Sicherheit von Anfang an statt nachträglich · Verständliches Handbuch für alle Rollen statt reiner Technik-Doku
6Ähnliches Vorhaben? Sprechen wir.
Ob Vereinsverwaltung, Wettkampf- oder Mitgliederverwaltung, oder eine andere gewachsene Individuallösung, die niemand mehr anfassen will — jede Neuentwicklung beginnt mit einem kostenlosen Analysegespräch. Ich zeige Ihnen, was in Ihrer Situation sinnvoll ist, was es kostet und wie lange es dauert.