Sessions
In BC2 werden alle Sessiondaten verschlüsselt in der Datenbank gespeichert. Selbst wenn also jemand Zugriff auf die Datenbank hat, kann er die Sessiondaten nicht einsehen. Zudem speichern wir in der Session nur die UserID, sonst nichts, also keine Rechte oder ähnliches. (Natürlich ist es legitim, weitere Daten in der Session zu speichern, z.B. bei mehrstufigen Formularen, dafür ist sie ja auch verschlüsselt.)
Zudem wird die SessionID bei jedem Zugriff erneuert, so dass eine eventuell "geklaute" SessionID nicht dazu führen kann, dass ein Angreifer die Session übernimmt.
Namespace
Das ist hauptsächlich für Programmierer interessant. Alle unsere Klassen befinden sich jetzt im Namespace \CAT, Helperklassen entsprechend in \CAT\Helper, usw. Das hätte ich von Anfang an so machen sollen, hab's aber irgendwie versäumt.
Erste Tests mit mehreren Sites
Ein Kernfeature der Version 2.x ist die Trennung zwischen Engine und Site, also quasi die Auslagerung des (sowieso nicht mehr existenten) "pages"-Verzeichnisses sowie des Verzeichnisses "media". Man pflegt also _eine_ Installation und betreibt damit mehrere, voneinander unabhängige Webauftritte. Bisher hatte ich nur eine Site in meiner Entwicklungsumgebung, jetzt teste ich mit zwei. Daraus haben sich bereits einige Änderungen ergeben.
Bootstrap 4
Das betrifft hauptsächlich das Backend-Theme und das dort verwendete jQuery Plugin "Datatables". Da Bootstrap 3 nicht mehr weiter gepflegt wird, war es wichtig, frühzeitig umzusteigen, da wir ja nicht ein brandneues CMS mit veraltetem Zeug ausliefern wollen.
jQuery und "sonstiges JavaScript"
Bisher lag der Fokus nur auf jQuery und Plugins, jetzt gibt es ein Modul für beides sowie ein Admin-Tool für beides. Man kann also künftig "reines" JavaScript (auch als "Vanilla" bezeichnet) genauso bequem verwalten wie jQuery Plugins. Diese "Addons" werden in einer eigenen Tabelle in der Datenbank analog zu dem CMS-Addons hinterlegt.
Komplette Überarbeitung des Asset-Managements
Assets sind hauptsächlich JavaScripts, CSS-Dateien und Bilder, die zum Core bzw. zu Modulen gehören. (Im Gegensatz zum Inhalt des media-Verzeichnisses, welches Site-Inhalte beinhaltet.) Hier gibt es einige Herausforderungen:
- Das Engine-Verzeichnis soll künftig nach Möglichkeit außerhalb des vom Web aus zugänglichen Bereichs liegen. Somit gibt es auch keine URLs, mit denen sich z.B. Images aus Modulverzeichnissen aufrufen lassen.
- Wir sammeln JavaScripts und CSS von verschiedenen Stellen ein, angefangen von festgelegten Verzeichnissen mit Namenskonvention (frontend.css etc.) bis zu headers.inc.php und footers.inc.php für komplexere Anforderungen.
- Die eingesammelten Sourcen sollten möglichst komprimiert an den Browser ausgeliefert werden. Hierbei ist aber die Reihenfolge zu beachten (z.B. jQuery immer vor Plugins), Bedingungen müssen berücksichtigt werden (z.B. <!-- if... ), usw.