Sicherheit
Sicherheitsmodell und Befehlsvalidierung
- Nie eine Shell. Befehle werden via
proc_openmit einem argv-Array ausgeführt. - Befehls-Whitelist. Modulskripte müssen
modules_v4/<module>/cli/<script>.phpentsprechen, existieren und sich in einemmodules_v4/<module>/cli/-Verzeichnis auflösen. Core-Befehle sind auf die Read-only/Export-Allowlist beschränkt. - Argument-Validierung. Jedes Argument-Token muss eine einfache Option oder ein Wert sein — keine Shell-Metazeichen, keine Leerzeichen in Tokens, max. 10 Tokens.
- Arbeitsverzeichnisse. Modulskripte laufen vom webtrees-Root; Core-Befehle laufen von
data/. - Keine sensiblen Daten in stdout. Der Tick gibt nur Zusammenfassungen aus; die vollständige Ausgabe bleibt in der Ausführungshistorie (admin-only).
- UI-Aktionen sind alle als
*Admin*benannt (nur Admin, CSRF-geschützt). - Notaus-Schalter: Modul deaktivieren — der Tick tut dann nichts.
- Der Tick ist Single-Instance (flock), und der Kindprozess eines Jobs wird nach dem Timeout hart getötet (
SIGKILL). - Bündelung von Ereigniswarteschlangen. Eine Flut identischer Ereignisse wird zusammengeführt zu einem Joblauf.
- Webhook-Token nur im Header. Das Token wird ausschließlich im
X-Cronjob-Token-Header gesendet.