CSV-Upload gegen CSRF und unsichere Ablage härten

- Upload-Formular mit CSRF-Token absichern
- CSV-Dateien temporär unter var/uploads speichern und nach Import löschen
- Dateityp, Dateigröße und Dateiendung prüfen
- CSV-Ausgabe escapen und PayPal-Name-Lookup korrigieren
- M2- und Sicherheitsdokumentation aktualisieren
This commit is contained in:
2026-07-12 10:13:56 +02:00
parent e5fd47ecf6
commit 30378683e6
4 changed files with 144 additions and 40 deletions
+24 -5
View File
@@ -48,12 +48,29 @@ Erste Legacy-POST-Seiten sind opt-in abgesichert:
- `stricheintragen.php`: Sammelerfassung von Strichen.
- `einzahlung.php`: Sammelerfassung von Einzahlungen.
- `letzteneintraege.php`: letzte Einzahlungen und Strich-Eintraege loeschen.
- `csvupload.php`: CSV-Zahlungsimport.
Noch offen:
- Uploads: `csvupload.php`.
- Spezialprozesse: `mailversenden.php`, `jahresauswertung.php`.
### CSV-Upload-Haertung
- `csvupload.php` nutzt jetzt CSRF.
- Uploads werden unter `var/uploads` gespeichert und nach der Verarbeitung
geloescht. Damit liegen importierte Dateien nicht mehr im Webroot.
- Dateiendung, Dateigroesse und MIME-Typ werden vor der Verarbeitung geprueft.
- Hochgeladene Dateien bekommen serverseitig erzeugte Zufallsnamen.
- CSV-Auswertungswerte werden HTML-escaped ausgegeben.
- Die PayPal-Namenssuche nutzt `Name` und `paypalname` mit expliziter
Parameterbindung.
Offen fuer M6:
- Importvorschau vor dem Schreiben.
- Import-Batch/Audit-Log.
- Saubere Fehlerberichte je CSV-Zeile.
### Migrationen
- `database/migrations/0001_legacy_mysql_baseline.sql` bildet die bisherige
@@ -115,6 +132,10 @@ Die Skripte erwarten die bekannten Dev-Umgebungsvariablen `DB_HOST`, `DB_NAME`,
liefert bei POST ohne Token HTTP 419.
- CSRF positive Tests fuer Korrektur-/Loeschflows: gueltige Token funktionieren
fuer das Loeschen temporaerer Einzahlungs- und Strich-Testeintraege.
- CSRF negative Test fuer CSV-Upload: POST ohne Token liefert HTTP 419.
- CSV-Upload positive Tests: gueltiges Token verarbeitet eine CSV-Datei, erkennt
eine PayPal-Alias-Dublette und hinterlaesst keine Datei in `var/uploads`.
- CSV-Upload negative Tests: Nicht-CSV-Dateien werden abgewiesen.
- Golden Master weiterhin gruen mit 104 Assertions.
- HTTP-Smoke weiterhin gruen mit 14 sicheren Seiten.
@@ -128,8 +149,6 @@ Die Skripte erwarten die bekannten Dev-Umgebungsvariablen `DB_HOST`, `DB_NAME`,
## Naechste Schritte
1. CSV-Upload gesondert absichern und spaeter Uploads ausserhalb des Webroots
verlegen.
2. Eine duenne View-/Layout-Struktur vorbereiten, ohne Header/Footer-Markup
1. Eine duenne View-/Layout-Struktur vorbereiten, ohne Header/Footer-Markup
sofort zu verschieben.
3. Danach M3 starten: Tenants, User, Registrierung, Login und Rollen.
2. Danach M3 starten: Tenants, User, Registrierung, Login und Rollen.