TYPO3 Release 14.3.6
In der Reihe TYPO3 Release-Notizen beleuchten wir regelmäßig die wichtigsten Bug-Fixes/Security-Issues oder wichtigen Änderungen in einem neuen Patchlevel-Release. Diese Releases sind gemäß Roadmap bereits terminiert und erscheinen grob einmal im Monat.
Bugs haben je nach Projekt unterschiedliche Auswirkungen. Was in einem Projekt kritisch ist, kann in einem anderen kaum eine Rolle spielen. Unsere Gewichtung ist daher subjektiv und soll die Relevanz anderer Fixes nicht herabspielen.
Aktuelles Release
Dieses Security-Release behebt ein Sicherheitsrisiko für zielgerichtete XHR/Fetch-Angriffe im Backend bei Nutzung etwaiger XSS-Vektoren, bei denen der ReferrerEnforcer umgangen werden konnte.
Ansonsten enthält dieses Release einige Ergebnisse der TYPO3-DevDays Coding-Night - ein Ergebnis von viel Arbeit der Community. Herzlichen Dank an dieser Stelle: Es wurden “sticky Header" im Sprachvergleichsmodul eingebaut, die Zuordnung von “free mode”-Sprachinhalten korrigiert. Dark-Mode für Exceptions.
Es gab Updates in Bezug auf Doctrine DBAL (Kompatibilität zu MariaDB 11.7 und 11.8, UCA Collations, Foreign Key Schema Migration, DBAL 4.4 Kompatibilität, JSON-Spalten). Und Extbase-Objekte im Backend werden nun immer ohne “hidden/deleted”-Restriktionen ausgewertet und im Frontend werden im “strict”-Language-Modus nur noch übersetzte Datensätze ausgelesen. Fehlende FAL-Assets lösen keine Fehlerseiten im Frontend mehr aus. Der ExtensionManager im Classic-Mode wertet Dependencies wieder besser aus. Der Symfony Messenger wurde in Bezug auf Transport-Zuordnung optimiert. Die Live-Suche kann nun auch Bild(meta)-Daten finden. User TSConfig für User Settings funktioniert mit Overrides/Ausblenden wieder korrekt. EXT:form stellt die Reihenfolge von Optionen bei JSON-Speicherung (Datenbank) wie gewünscht sicher und Optionen mit “Punkt” im Namen werden korrekt ausgelesen.
Zudem wurden einige kleinere Composer-Dependencies aktualisiert.
Insgesamt gab es 125 Änderungen.
Sicherheit
TCA / Schema API / Record API
- WissenswertDie Schema API kann für type=group Datensätze die erlaubten Relationen direkt via `getAllowedSchemaNames` und `allowsAllSchemata` Methoden auflösen, und der RelationHandler wie auch DataHandler machen nun Gebrauch davon
- Verbesserung der "ActiveRelation" für MM-Relationen
- TCA Placeholder können mit pipe getrennte Notation nutzen um auf andere Datensätze zu referenzieren, die konnte unter gewissen Umständen jedoch das Wort "Array" erzeugen.
Site Settings / Site Sets
EXT:form
- WissenswertDie Reihenfolge von Optionen wird von EXT:form mittels JSON gespeichert. Bei Nutzung der Datenbank-Speicherung von Formularen wird hierfür der JSON-Datenbanktyp genutzt, bei dessen Implementierung die Reihenfolge jedoch verloren gehen kann. Diese wurde nun durch zusätzliche Konvertierung wieder sichergestellt.
- WissenswertEin eingeschränktes Set an HTML (via dompurify) kann nun in EXT:form labels genutzt werden um z.B. Beschreibungen mit Markup zu verbessern
- WissenswertYAML-Eigenschaften mit Punkten im Key (z.b. E-Mail-Adressen) werden wieder korrekt als key ausgelesen anstelle zerhackstückelt zu werden.
- Für die "Summary Page" wird nun der Button zum Anlegen von inneren Inhalts-Elementen unterdrückt, da diese dort gar nicht platziert werden können.
TypoScript
- WissenswertUser TSConfig für User Settings (override und Ausblenden von Feldern) wird nun wieder korrekt ausgewertet
- TCEFORM TypoScript Zuweisungen für `type`-spezifische Blöcke werden nun korrekt in der Label-Auswertung angewendet
API (Frontend / Extbase)
- Sehr wichtigExtbase Objekte im Kontext "fallbackType: strict" erhalten nun keine nicht-übersetzten Datensätze. Siehe Changelog für Details!
- WissenswertWenn eine Unterseite eines TreeMounts in einer übersetzten Sprache aufgerufen wurde, konnte das URL-Routing im Rootline-Lookup fehlschlagen. Nun wird hierfür die Standardsprache zum korrekten Resolving genutzt.
- WissenswertBei Nutzung des MemorySpool Mailtransports wurden etwaige PHP-Fehlermeldungen die während des Mailversand auftraten ggf. nicht geloggt (nur sehr spezifische Fehlermeldungen bislang). Dies wird nun großflächiger sichergestellt.
- WissenswertDie neuen Extbase QoM methoden für trim/coalesce/concat bei "ORDER BY" statements nutzen nun korrektes Quoting
Fluid
- WissenswertDas neue `contentArea` Objekt kann in Fluid nun auch gezählt werden (hilfreich bei Iteration)
- `f:image.srcset` kann nun auch eine direkte Extbase FileReference nutzen, und muss nicht erst zu `getOriginalResource` gewandelt werden
- Der `be:link.record` ViewHelper kann nun mit einem neuen Argument `contextual=1` direkte Bearbeitungslinks ausgeben, die im Context Panel geöffnet werden.
EXT:adminpanel
EXT:indexed_search
Content Security Policy (CSP)
Backend: UI
- Sehr wichtigExceptions im Dark-Mode werden nun auch im Dark-Mode ausgegeben. Nicht "sehr wichtig", aber "sehr schön". ;-)
- WissenswertDie EXT:dashboard Widgets werden nun auch mit dem neuen Backend-Wizard (technisch im Hintergrund) erzeugt und folgen damit dem neuen UI
- WissenswertÜbersetzte "typolink" Datensätze (doktype=3) nutzen nun das Linkziel des übersetzten Datensatzes, nicht der Originalsprache zur Erzeugung von Links
- WissenswertDer Sprachvergleich für "FreeMode"-Sprachen stellt diese nun nicht mehr falsch geclustert dar, sondern ordnet sie einer einzelnen Zeile zu. Nur für Fälle wo alle ausgewählten Sprachen im FreeMode erscheinen werden diese mit Pseudo-Zuordnung nebeneinander gezeigt. Dies war vorher komplett kaputt.
- Der Kontrast von "Placeholder"-Inputinhalten wurde verbessert (WCAG)
- Korrekte Benennung des "Records"-Moduls (Überbleibsel "List" entfernt)
- Die Clipboard-Buttons für Copy+Paste werden nur noch angezeigt wenn sie auch wirklich nutzbar sind
- Vermeidung von CSS-Fehlpositionierung in Modal-Popups mit "fixed positionining"
- Die Benutzername/Passwort-Kombinationen die man alternativ (!) mit einem "url" String definieren konnte werden nun auch maskiert bei deren Anzeige im Install-Tool
- Verbessertes Element-Fokus-Verhalten für den neuen "Neue Seiten"-Wizard
- Versteckte aber erforderliche Pflichtfelder im "Neue Seiten"-Wizard werden nun dargestellt
- Das "aria-hidden" Handling von Icons in der Backend-Topleiste wurde verbessert und führt in Firefox nicht mehr zu Dopplungen (für Screenreader)
- Der das modale "Record Browser" Popup hat nun seinen eigenen Sprachkontext, so dass nicht plötzlich Einstellungen des "Content > Record" Moduls angewendet werden
- Der EnvironmentController im Install-Tool nutzt nun ein korrektes graphicsMagick Statement zur Erzeugung von Test-Bildern mit Transparentem Hintergrund, ohne ein falsches Ergebnis anzuzeigen.
- Die Darstellung eines Fortschrittbalkens im Dateiupload überlagert nun nicht mehr den Modal-Titel
- Das Camino-Backend-Preview zeigt die Call-to-Action Links mit Icon korrekt an
- Die Navigation im Sprachvergleichs-Backend ist nun "sticky" und scrollt nicht mit, damit sie stets im Blick bleibt
- Die Sprache einer einzelnen Spalte im Sprachvergleichs-Backend bleibt nun beim scrollen "Sticky" so dass eine Zuordnung der Sprache immer leicht möglich ist.
- Die Erzeugung von Frontend-Vorschaulinks aktuell nicht freigeschalteter Seiten zeigt nun auch Seiten an, die nicht innerhalb der exakten Systemzeit-Sekunden freigeschaltet wird, sondern innerhalb der selben Minute. Schwer zu erklären, aber es sorgt dafür dass auch in Randfällen Seiten nun im Frontend dargestellt werden können, die zur selben Minute freigeschaltet gehören.
- CSS-Klassen für generische Buttons in der Dateilisten-Aktionsbar werden nun korrekt übertragen
- Die Breadcrumb-Nodes in Backend-Modulen können nun bei Modulen, die Parameter übertragen die Links korrekt erkennen und auswerten, so dass ein Klick auf solche Links nicht mehr zu Fehlern führt
Backend: API / Core
- Sehr wichtigMariaDB 11.7 und 11.8 wurden in die TYPO3-Testmatrix eingefügt und Testfehler behoben. Auch für die PostgreSQL-Plattform gab es eine kleinere Anpassung. Somit können TYPO3 v13+v14 mit diesen Versionen potentiell genutzt werden. Fehler gerne berichten!
- Sehr wichtigExtbase-Objekte im Backend (!) werden nun immer ohne Anwendung von enablefields-Restriktionen ausgeliefert (also auch hidden und nicht veröffentlichte Datensätze starttime/endtime), so wie es das TYPO3-Backend auch mit Datensätzen tut. Hierzu wird der TYPO3-Request-Kontext für das Backend ausgewertet. Wenn plötzlich Datensätze angezeigt oder ausgewertet werden, die im Backend vorher nicht erschienen (z.b. eigene Module) dann müssen hier eigene Restrictions gezielt angewendet werden.
- Sehr wichtigDas Backend-Preview konnte in gewissen Umständen im Sanitizing von h1-6 und a Tags XSS nicht unterbinden. Da im Backend CSP-Regeln angewendet werden, konnte dies jedoch nicht missbraucht werden und wird nicht als Sicherheitslücke angesehen.
- WissenswertDie Auswertung von "JSON" Datenbank-Spaltentypen in Doctrine DBAL wird nun intern bei Extbase besser ausgewertet, so dass es zu keinem doppelt kodierten JSON mehr kommen sollte, un der "JSON"-Typ gut eingesetzt werden kann.
- WissenswertDer neue mehrschrittige Wizard (z.B. für neue Seiten und neue Formulare) kann nun optional den Zusammenfassungs-Schritt überspringen. Dies ist für neue EXT:form Formulare standardmäßig aktiviert.
- WissenswertDie Live-Suche kann nun auch Dateien (sys_file / sys_file_metadata) als Suchergebnis finden und darstellen
- WissenswertWenn ein Bild via TypoScript ausgegeben werden soll, welches in der FAL als "missing" deklariert ist, wird keine Exception mehr geworfen sondern kein Bild dargestellt und nur eine Warnung geloggt.
- WissenswertDie Ausgabe von fehlenden Bildern erzeugt nun kein leeres "src" Attribut mehr bei f:image ViewHelpern, sondern erstellt ein generell leeres Tag.
- WissenswertDer Symfony Messenger kann nun das Attribut `AsMessageHandler::$fromTransport` korrekt nutzen und auswerten, und bei Wildcard-Route-Matching werden Fallback-Routen nicht mehr automatisch bespielt - und somit auch das doppelte Interpretieren von Messages in mehreren Transports wird unterbunden. Changelog-Eintrag hierzu bitte lesen.
- WissenswertÄhnlich wie der obige Eintrag werden Wildcard-Route-Matches nun als Fallback interpretiert, und nur genutzt wenn kein weiterer Transport bisher gegriffen hat. Auch hier bitte Changelog-Eintrag beachten
- WissenswertDatensätze, die ein l10n_parent, aber kein l10n_source definiert hatten, werden nun auch ohne dieses Feld korrekt zugeordnet
- WissenswertDer DataHandler `hasPageContextPermission` check wird nun wieder so platziert, dass der Permission-Check-Bypass korrekt ausgewertet wird
- Die Doctrine DBAL Nutzung vom "Table" schema greift nun sicherer auf die normalisierten Objektnamen zu, um eine Abhängigkeit von "wackeligen" Array-Key-Identifkationslookups zu vermeiden
- Vermeidung von unendlicher Auflösungs-Rekursion wenn ein doktype=3 (interner Link) auf sich selber zeigt
- MariaDB 11.4+ kann nun mit den neuen UCA-Collations korrekt genutzt werden im SchemaMigrator
- Die DBAL Doctrine Auswertung gelöschter Foreign Key Constraints im SchemaMigrator erfolgt jetzt ohne PHP-Fehler
- Die Doctrine DBAL Nutzung vom "quoteIdentifier" Handling wurde optimiert und vermeidet eine deprecated Methode.
- Bessere Kompatibilität zu Doctrine DBAL 4.4 durch Nutzung modernerer Tabellen/Spalten-Introspection-Methoden
- Etwaige Doctrine DBAL Connection-Credential Details werden nun sowohl mit legacy als auch aktuellen Namen korrekt mit "****" Sternchen im Install-Tool maskiert
- Bugfix durch DBAL 4.4 Patch, Erstinstallation mit leerer, bestehender Datenbank funktioniert nun wieder
- Die Slug-Erzeugung in FormEngine klappte nicht zuverlässig, wenn ein DateTime-Feld als Teil einer URL-Struktur konfiguriert wurde
- Wenn eine Extension mehrere DocHeaderComponent Einträge erzeugen wollte, wird dies nun mit einer Warnung bzw. Fehlerhinweis geloggt, da dies seit TYPO3 v14 nicht mehr möglich ist.
- Die LogRecord Methoden für offsetSet (ArrayAccess) wurde korrigiert, da sie bislang den falschen Wert zugewiesen hatte
- In Vorbereitung auf größere PHP 8.5 Kompatibilität wird "unset()" auf protected Klassen-Properties nun vermieden, um keine Probleme mit property Hooks zu erzeugen
- Der Sprachkey "default" für Backend-Benutzersprachen beim Erzeugen über den "backend:user:create" CLI Befehl wurde nun entfernt (gültig ist nur noch "en" hierfür). Dies war bereits länger deprecated und intern nicht mehr genutzt.
- Ein "Undelete" im DataHandler kann nun referenzierte IRRE-Datensätze auch kaskadierend wiederherstellen
- Die "Correlation ID" beim DataHandler sys_log Handling wird nun gezielter intern durchgereicht
- Page TSConfig kann nun wieder korrekt TCA Tabellen-Labels überschrieben die in FormEngine ausgewertet werden
- Der HTTP-Header "Content-Encoding" wird, falls gesetzt in Extensions bzw. TypoScript, nun auch in eigenen 404-Errorhandlern durchgereicht.
- Typ-Annotationen (nicht deklarationen) für `DataHandler::$substNEWwithIDs` wurden ergänzt
- Entfernung eines nicht mehr genutzten "install"-Queryparameters ($formValues)
- Fehlerhafte, abgebrochene Backend-Logins werden korrekt geloggt
- Die auf SHA3-256 umgestellten HMAC Tokens werden für die Einbettung von Dateidownloads nun überall ausgewertet, zwei Stellen wurden übersehen bislang
- Optimierung des Rechtechecks für die Erstellung von Unterseiten auf Ordner ohne Leserechte im Seiten-Erzeugungs-Wizard
- Das Paket `psr/clock` wird nun explizit genutzt und neue Klassen dafür bilden Methoden ab um die Systemzeit für z.B. langlebigere Prozessausführung (CLI, Authentifikation/Sessions) zu tracken.
- Das Parsing von "FIND_IN_SET" statements in "ORDER BY" kann nun mit Trennzeichen innerhalb der Statementteile umgehen
- Das Parsing der "ORDER BY" Anweisung im Suggest-Wizard (TCA) kann nun korrekt mit Zeilenumbrüchen umgehen
- Die PSR-7 Session-Cookie-Ausgabe erfolgt nun über eine isolierte Methode
PHP-Typfehler
Backend: CKEditor / RTE
Backend: Extension Manager
- WissenswertVermeidung einer Fehlermeldung bei Zugriff auf die Version einer ExtensionManager Dependency mit einem nicht mehr vorhandenen getter. Hiermit sind nun Extensions auch wieder korrekt installierbar die gewisse Versionschecks enthalten.
- WissenswertBessere Auswertung bei Kompatibilität einer Extension zu mehreren TYPO3-Core-Versionen im Update-Check und Download
- Vermeidung einer harten Fehlermeldung falls die Extension-Manager-Tabellen sich während einer Operation ändern (neue UIDs), in dem geprüft wird dass Lookups nach UID auch potentiell fehlschlagen können.
- Das Info-Icon für Extension-Manager-Hinweise für unerfüllte Abhängigkeiten wird wieder mit dem richtigen Status ausgegeben
- Der ExtensionManager nutzt nun den ExtensionKey für einige Infos/Details anstelle einer "uid" für die Datenbank-Cachetabelle aller Extensions
Backend: EXT:workspaces
Backend: EXT:scheduler
- WissenswertDas Kommando "mailer:spooler:send" kann nun wieder korrekt für den Scheduler eingesetzt werden
Backend EXT:linkvalidator
Backend EXT:impexp
EXT:redirects
Strukturelles
- Die TYPO3 "ClassLoadingInformation" für PSR-4 Pfade wird (vor allem für das testingframework) nun besser erzeugt
- Auch XSL und ICO Dateien werden in der htaccess-Vorlage nun als versionierbare Dateinamen akzeptiert
Dependencies
- WissenswertVorbereitungen für PHP 8.6 Kompatibilität (Tests)
- Update von PHPStan
- Update von `christian-riesen/base32` auf v2
- Update von `symfony/property-info`
- Update von `guzzle` (Security Issues möglich)
Dokumentation
- Es wird nun dokumnentiert, dass bei der Auswertung der EXT:seo Metadatenfelder die Datenbank-Inhalte der Seiteneigenschaften Priorität vor den TypoScript-Definitionen haben.
- Anstelle von Anker-Links mit Hinweisen zu System-Konfigurationsoptionen werden diese direkt ausgegeben, und Texte leicht verbessert
- Dokumentation wird nun mit dem aktuellsten `render-guides` image erzeugt (leicht aktualisiertes Layout)
