Bug #320
offen[Bugsink] DateMalformedStringException: Failed to parse time string (2026--1' OR 5*5=26 -- -01) at position 4 (-): Unexpected character
0%
Beschreibung
Bugsink: https://bugsink.cytrus.de/issues/issue/1bb22289-9aaf-4620-a43d-b4b9eb9b74d2/event/last/
Typ: NEW issue
Projekt: www-rietberg-de
Bugsink Alert
DateMalformedStringException: Failed to parse time string (2026--1' OR 5*5=26 -- -01) at position 4 (-): Unexpected character
Automatisch erstellt durch n8n
KI-Analyse:
1. Ursache identifizieren (Root Cause)¶
Die Fehlermeldung DateMalformedStringException: Failed to parse time string (2026--\' OR 5*5=26 -- -01) deutet auf einen SQL-Injection-Versuch hin, der in ein Datumsfeld injiziert wurde.
Besonders auffällig ist die Zeichenkette:
2026--' OR 5*5=26 -- -01
Diese entspricht keinem gültigen Datum. Sie enthält:
- Ein JavaScript-Datum
2026-... - SQL-Kommentarzeichen
-- - Eine Kalkulationsanweisung
5*5=26(falsch, aber scheinbar absorbiert) - Weitere SQL-Kommentare und ein falsches Datum
-01
Mögliche Ursache:¶
Dieser Fehler taucht typischerweise auf, wenn:
- Eine Extension oder ein Skript benutzerdefinierte Eingaben in ein Datumsfeld schreibt, ohne diese zu validieren oder zu escapen.
- Der Timestamp-Wert (z. B. aus einer URL-Parameter wie
?date=2026--' OR 5*5=26 -- -01) nicht ordnungsgemäß aufbereitet wird. - Die **
$_GEToder$_POST-Daten** direkt in eine SQL-Abfrage oder in einDateTime-Objekt fließen, ohne Sicherheits- oder Validierungschecks.
Im Stacktrace ist zu sehen, dass der Fehler bereits im frühen Middleware-Schritt (VerifyHostHeader, NormalizedParamsAttribute, ResponsePropagation) auftritt – was darauf hindeutet, dass die eigentliche Anfrageanalyse bereits fehlerhaft ist. Allerdings scheint die Exception in einer tieferen Schicht aufzutreten, wo ein Datum geparst wird, z. B. in einer Database-Abfrage, die intern ein DateTime-Objekt erwartet.
2. Fix beschreiben (konkret)¶
Schritt-für-Schritt-Fix:¶
-
Eingabedaten validieren und sanitieren
- Vor allem bei Datumsfeldern sollte geprüft werden, ob der eingehende Wert ein gültiges Datum oder Timestamp ist.
- Verwendung von
DateTime::createFromFormat()oder TYPO3-eigenen Hilfsmethoden wieGeneralUtility::makeInstance(DateTime::class, $value).
try { $date = GeneralUtility::makeInstance(DateTime::class, $inputDate); } catch (\Exception $e) { // Fallback oder Fehlerbehandlung $date = GeneralUtility::makeInstance(DateTime::class, 'now'); } -
Use strict input filtering in GET/POST parameters
- Beispiel:
$dateString = filter_input(INPUT_GET, 'date', FILTER_SANITIZE_STRING); if (!checkdate(...)) { ... } // oder Regex-Prüfung
- Beispiel:
-
SQL-Injection verhindern
- Alle Datenbankwerte sollten über PDO-Parameter binding oder TYPO3-Abfragen mit QueryParser gespeichert werden:
$queryBuilder->select(...) ->where($queryBuilder->expr()->lte('date_field', ':date')) ->setParameter('date', $safeDate);
- Alle Datenbankwerte sollten über PDO-Parameter binding oder TYPO3-Abfragen mit QueryParser gespeichert werden:
-
Host-Header und Request-Parameter validieren
- Im Middleware-Bereich (wie in
VerifyHostHeader) sollten unerwartete oder manipulierte Parameter abgefangen werden.
- Im Middleware-Bereich (wie in
-
Extensions prüfen, die Datumswerte verwenden
- Insbesondere Extensions, die Kalender-, Events-, News- oder Archivfunktionen anbieten.
3. Betroffene TYPO3 Extension nennen¶
Obwohl der Stacktrace keine direkte Extension nennt, deutet die Fehlermeldung typischerweise auf folgende Kategorien hin:
Mögliche Extensions:¶
- News System (news) – wenn News-Listen nach Datum gefiltert werden
- Calendar Management (cal), Eventsmanager
- Indexed Search oder Search Forms mit Datumsoptionen
-
Eigenentwickelte Extensions, die:
- URL-Parameter wie
?date=...akzeptieren - Diese direkt in Datenbankabfragen oder
DateTime-Objekte schreiben
- URL-Parameter wie
💡 Keine konkrete Extension nennen, da keine Extension im Stacktrace erwähnt wird. Der Fehler taucht im Core-Middleware-Bereich auf, wahrscheinlich ausgelöst durch eine externe Extension.
4. Confidence (0–100%)¶
| Bewertung | Wert | Begründung |
|---|---|---|
| Root Cause Identification | 90% | Der Angriffsvektor (SQL-Injection in Datum) ist klar erkennbar |
| Fix Description | 85% | Die genannten Maßnahmen sind konkret umsetzbar und typisch für TYPO3-Cleanups |
| Betroffene Extension | 60% | Keine direkte Extension im Trace → wahrscheinlich Drittlicht |
| Gesamt Confidence | 78% | Starkes Bild vom Problem, aber fehlt direkte Projekt-info |
✅ Zusammenfassung¶
-
Problem: SQL-Injection-Versuch in einem Datumsfeld, der zu einem
DateMalformedStringExceptionführt. - Ursache: Fehlende Validierung/Sanitierung von Benutzereingaben (GET-Parameter).
-
Lösung: Eingaben validieren,
DateTime-Objekte sicher erstellen, PDO-Binding nutzen. - Betroffen: Wahrscheinlich eine Extension, die Datumseingaben verarbeitet (keine konkrete im Trace).
- Confidence: ~78% – deutlich analysierbar, aber keine 100%ige Sicherheit ohne Code-Inspect.
Nichts anzuzeigen