- tests/UploadTest.php prüft den SVG-Filter (Skripte, Event-Handler,
javascript:-Verweise) und Upload::isLocal gegen Pfad-Tricks
- tests/UiTest.php prüft Versionsstempel, Media-Pfade und die
Branding-Overrides inklusive Abweisung ungültiger Farbwerte
- PHPStan analysiert jetzt auch includes/Ui.php und includes/Upload.php
- CI vergleicht die Sprachdateien (gleiche Schlüsselmenge) und prüft,
dass jeder im Code verwendete Schlüssel existiert
Dabei aufgefallen und behoben: Upload.php rief __() direkt auf und wäre
außerhalb einer Seite mit geladener I18n mit einem Fatal Error
abgebrochen; jetzt gibt es einen Fallback auf die deutsche Meldung.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Sicherheit:
- .htaccess im Projektstamm mit X-Content-Type-Options, X-Frame-Options,
Referrer-Policy, Permissions-Policy und einer Content-Security-Policy;
da alle Assets lokal liegen, erlaubt sie nur noch die eigene Herkunft
(Ausnahme: hCaptcha, falls aktiviert)
- includes/, tools/, tests/, updater/storage und uploads/ schützen sich
über eigene .htaccess-Dateien – auch bei Installation im Unterordner
- Docker: AllowOverride All, damit diese Regeln überhaupt greifen, und
ein Volume für uploads/, damit Logos ein Image-Update überstehen
Werkzeuge:
- tools/screenshots.py erzeugt alle Bilder in docs/screenshots aus der
Demo-Instanz; tools/README.md beschreibt beides
- Einstellungs-Tabs sind per ?tab=… direkt verlinkbar (serverseitig, also
auch ohne JavaScript)
Dokumentation: Readme um Markenfarben, Bild-Upload, lokale Assets,
Sicherheits-Header (inkl. Nginx-Entsprechung) und einen Abschnitt
"Entwicklung" ergänzt; Screenshots neu erzeugt, Version 2.6.0.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>