Altlasten im Template-Baum¶
Historischer Kontext
Diese Seite listet typische Altlasten-Muster im Sachpool-Template-Baum auf: auskommentierte Legacy-Varianten, FastpublishCMS-Relikte, wiederkehrende Anti-Pattern. Sie ist nicht vollständig, sondern sammelt exemplarische Funde aus dem Code-Audit 2026-04 als Nachschlagewerk für zukünftige Aufräumarbeiten.
Für offene Handlungspunkte mit konkretem Fix-Vorschlag siehe die interne Datei
HANDLUNGSEMPFEHLUNGEN.md im Repo-Root (nicht publiziert).
Typologie der Altlasten¶
Im Laufe der FastpublishCMS→WebEdition-Migration (2020–2025) sind vier wiederkehrende Muster entstanden:
- Auskommentierte FastpublishCMS-Blöcke — alter Code in
<!-- ... -->oder<we:comment>-Wrappern, zur Referenz belassen. - PHP5-mysql_*-Relikte —
mysql_query(),mysql_real_escape_string(),@mysql_fetch_arrayaus der PHP 5/7-Migrationsphase. - Doppelte / parallele Code-Pfade — eine moderne Variante und ein alter
Block im selben Template, verbunden durch einen Toggle (z. B.
$useNew). - Copy-Paste-Duplizierung — 2–4× identischer Block für unterschiedliche Ansichten statt gemeinsamem Include.
Beispiele¶
FastpublishCMS-Blöcke¶
searchmask.tmpl (Vertragsauskunft) enthält mehrere <we:comment>-Blöcke
mit Referenzen auf drucken2.php — einer laut Migrationsgeschichte
abgelösten Legacy-Druckmaske.
_detail-vergleichsportal.tmpl — auskommentierter alter Lizenz-Badge-Code
per cfilter, auskommentierte link-rechner/link-download-Buttons,
kommentierte prepareSQL="true"-Variante.
PHP5-Relikte¶
covomo.tmpl (Vergleichsportal Covomo) enthält einen großen auskommentierten
Block mit mysql_query() / mysql_real_escape_string() / @mysql_fetch_array —
PHP5-Datenbankzugriff. Der aktive Code nutzt bereits SachPoolDB::getInstance().
weiterbildung/frontend/weiterbildungs-funktionen.tmpl — kommentierte
$_GET['id']-Zugriffe neben $_REQUEST['id'], Versionsreste aus drei
Refactoring-Runden.
Doppelte Code-Pfade¶
contractdetails.tmpl (Vertragsauskunft, Template 158):
Der komplette
switchüberSPARTE_ID(KFZ / Hausrat / Haftpflicht / Gebäude / Rechtsschutz / Unfall) läuft 2× identisch — einmal vor dem HTML-Block (Z. 72–114), einmal im HTML (Z. 254–294). Alle DB-Queries werden dadurch doppelt abgesetzt.
_detail-tarifrechner.tmpl (Tarifrechner) — Partner-Objekt wird zweimal per
<we:object> geladen (Zeilen 9–14 und 26–92). Erster Block nur zum Kopieren der
Werbefelder in Globals.
Copy-Paste-Duplizierung¶
kennzeichen-uebersicht.tmpl (Backend 238): Vier Ansichten (alle / sortiert /
reserviert / frei) sind Copy-Paste — inklusive 4× dupliziertem Tablesorter-Init.
werbung-iteration.tmpl (Werbeeinblendung): 10 identische Banner-Blöcke
(werbebanner1 … werbebanner10), statt Schleife.
Legacy-Debug-Reste¶
Debug-Toggles¶
searchstart.tmpl (Vertragsauskunft): $debug = false; als manueller
Toggle, mehrere #echo var_dump(...)-Kommentare.
available-functions.tmpl (Template 214, Weiterbildung-Tools):
<we:comment> auskommentierte, aber
leicht reaktivierbare print_r(get_defined_functions())-Aufrufe.
Debug-Echos in Fehlerpfaden¶
thinksurance.tmpl (Vergleichsportal): bei API-Fehler
print '<pre>'; print_r($response); print '</pre>'; — Tokens und Nutzerdaten
landen im HTML.
appriori.tmpl (Template 194): identisches Pattern im Fehlerpfad; gibt
zusätzlich $api_key als Teil des Request-Objekts aus. Credential-Leak im
Fehlerfall.
_detail-vergleichsportal.tmpl: Debug-Echo auskommentiert, nicht entfernt:
Legacy-Platzhalter im Link-Modul¶
Das Link-Modul mit %SACHUSER%-Platzhaltern
stammt ursprünglich aus FastpublishCMS. Historisch auch %SACHPASS% — heute als
„nicht verwenden, Sicherheitsrisiko" markiert, aber in mrmoney.tmpl
(Vergleichsportal MrMoney) noch aktiv im Einsatz:
Dokument-/Template-Altablagen¶
/_login/vertragsauskunft/_del/(ID 2487) — Altablage mit unveröffentlichten Dateien im Produktivsystem./loign-_3.html— Root-Dokument mit Tippfehler (loignstattlogin), unveröffentlicht.2541.html,2542.html,edit.php,sidebar.php,entry.php— Root-Dokumente unklarer Herkunft, unveröffentlicht.
Tippfehler als Altlast¶
- Template-Ordner
sachpool-portal/compatiblity-layer(stattcompatibility) — weit verbreitet in Includes. - Ordner
sachpool-portal/gdv-abrechnungen-courtage-daten/cron/benachrichtung/(stattbenachrichtigung). - Template
_kontaktormular-inc.tmpl(fehlt das „f"). - DB-Feld
Fahrzeug_Identfiz_NrinMoped_bestellungen(stattIdentifiz). - Objektklasse
dasboard(stattdashboard, 0 Objekte).
Umgang mit Altlasten¶
Die Doku behält Altlasten sichtbar, damit bei Refactoring-Arbeiten nachvollziehbar ist, welche Muster historisch gewachsen sind. Neue Funktionen sollen die Muster nicht fortschreiben — stattdessen:
- SQL immer über
SachPoolDB::getInstance()+ Prepared Statements. - Bootstrap-4 statt EasyUI für neues Frontend.
- Config / Secrets in separate Dateien außerhalb des Docroot.
- Auth-Checks immer mit
$sach_userid-Vergleich gegen Objekt-Autoren.
Siehe auch¶
- Migrationsgeschichte — warum die Altlasten entstanden sind
- Kompatibilitätslayer (Entwicklung)
- Portierung Vertragsauskunft