WordPress Sicherheit für Childthemes

Der richtige Weg zu der Anpassung eines eigenen Theme auf Basis eines anderen ist unter WordPress ein so genanntes Childtheme. Um Veränderungen im Muttertheme nachzuvollziehen gibt es ein Plugin, welches die Dateiunterschiede hervorhebt. Somit werden sicherheitsrelevante Änderungen werden nicht mehr verpasst.

Zur Sicherheit von WordPress

WordPress bietet, wie jede andere Software auch, ein gewissen Grad an Sicherheit. Auch wenn WordPress an dem Ruf der absoluten  Unsicherheit leidet, sind es doch eher die viele Plugins und Themes, welche entweder schlecht programmiert, oder gepflegt wurden. Falsch konfigurierte Server außen vorgelassen.

Ein paar Fakten

WordPress hatte zu seinem Geburtstag im Jahr 2013 ganze 66.130.651 Installationen.
Seit dem entstehen von WordPress hatte das „CMS“ selbst 199 Sicherheitslücken. Hier stehen Drupal mit 149 , Joomla mit 72 Sicherheitslücken im Moment besser da. Typo3 ist WordPress dicht mit 179 Sicherheitslücken auf den Fersen. Hier muss auch das CVSS Scoring betrachtet und eigene Schlüsse daraus gezogen werden.

Info zu CVSS Scoring

CVSS stands for The Common Vulnerability Scoring System and is an industry open standard designed to convey vulnerability severity and risk. CVSS was commissioned by the National Infrastructure Advisory Council (NIAC) tasked in support of the global Vulnerability Disclosure Framework. It is currently maintained by FIRST (Forum of Incident Response and Security Teams).

WordPress spreche ich nicht von schlechten Code in der Basis frei und auch mit manchen Entwicklungsentscheidungen bin ich nicht wirklich einverstanden. Öfters sollte man die Programmierkraft doch in eine Reprogrammierung der Basis nutzen, anstelle neue Gimmicks einzuführen, oder für den Blogger vermeintlich wichtige Dinge auf Grund von IMO zu entfernen und nicht wieder einzuführen. Die Welt nutzt nicht nur Macs oder Tablets.

Warum Childthemes

Bei Childthemes handelt es sich Themes, welches die Eigenschaften des übergeordneten Themes erben und modifiziert werden können, ohne bei einem Update die Modifizierungen zu verlieren. Ein Childtheme kann somit den Entwicklungsprozess ungemein beschleunigen, das übergeordnete Framework nutzen und bietet vor allem auch Anfängern eine Plattform sich in dem Erstellen eines eigenen Themes einzuarbeiten.

Um ein Childtheme zu erstellen reicht es schon in dem Themeordner von WordPress (/wp-content/themes/) ein Verzeichnis mit dem Namen des Childthemes zu erstellen. Dort wird eine style.css erstellt, welche den Namen beinhaltet und auf das übergeordnete Theme verweist.

In meinem Fall ist das übergeordnete Theme ample und meine style.css:

Mit der Datei style.css kann ich CSS-Statements meinem Theme hinzufügen und auch die des übergeordneten Themes überschreiben. Dies gilt nicht nur für die CSS-Datei, sondern auch für die Anweisungen in der functions.php, sowie jede andere PHP-Datei des übergeordneten Themes.

Als Beispiel: header.php, footer.php, sidebar.php, single.php, content-single.php, comments.php etc.
Elmastudio hat eine kleine Übersicht hierzu.

/*
 Theme Name:   gotty 
 Theme URI:    http://got-tty.org
 Description:  Ample Child Theme
 Author:       ThemeGrill
 Author URI:   http://got-tty.org
 Template:     ample
 Version:      1.0
 License:      GNU General Public License v2 or later
 License URI:  http://www.gnu.org/licenses/gpl-2.0.html
 Tags:         light, white, three-columns, right-sidebar, left-sidebar, custom-header, custom-background, custom-menu, custom-colors, sticky-post, threaded-comments, translation-ready, featured-images, theme-options, responsive-layout
 Text Domain:  ample
*/

/* =Theme customization starts here. You can start writing CSS in the new lines below
------------------------------------------------------- */
body,
button,
input,
select,
textarea {
   color: #252525;
   font-size: 15px;
   line-height: 1.5;
   font-family: 'Roboto', sans-serif;
   font-weight: 300;
}
p {
   color: #252525;
   font-size: 15px;
   line-height: 1.5;
   margin-bottom: 15px;
   font-weight: 300;
}

#site-description {
   line-height: 1.5;
   font-size: 13px;
   padding-bottom: 0;
   color: #252525;
   font-weight: 300;
}

.entry-meta a {
   color: #252525;
   font-weight: 300;
}

Weitere Infos findet man in der Dokumentation von WordPress über Childthemes, oder auch im Netz.

Problematiken bei Updates

Ich hatte eine gewisse Zeit git genutzt um meine Änderungen in Childthemes zu verfolgen und mit den Änderungen in den übergeordneten Themes abzugleichen. Natürlich ein wirklicher Umweg. Ich möchte ja im Grunde bloggen und nicht für das Bloggen entwickeln :)

Hier kann auch natürlich ein diff der einzelnen Dateien auf der Kommandozeile nach jedem Update eine Möglichkeit sein, aber ein großer Umweg ist es immer noch, nur um sich einen kleinen Überblick zu verschaffen. Das Changelog gibt zwar Auskunft über die Änderungen im Ganzen, aber in welcher Datei sie nun wirklich aufschlägt ist dort nicht so einfach nachvollziehen.

Das birgt Sicherheitsrisiken in sich, da im übergeordneten Theme ein Sicherheitsfix vorhanden sein könnte, welcher in der Datei im Childtheme überlebt und ausgenutzt werden kann. Auch kann das Theme dadurch seine Funktionen verlieren falls einer der Aufrufe innerhalb WordPress sich ändert.

Das Plugin Child Theme Check

Ein Plugin welches es sich zur Aufgabe gemacht hat genau dieses Manko auszumerzen ist das Plugin Child Theme Check. Es vergleicht die Dateien des Childthemes mit jenem aus dem übergeordneten und gibt Auskunft über die Änderungen.

Diff der Datei content.php mit dem Plugin Child Theme Check
Child Theme Check content.php Ample

Das Plugin lässt sich über den Menüpunkt Werkzeuge > Child-Theme-Check aufrufen und gibt einen gut aufbereiteten Überblick über die Änderungen des Mutterthemes und bietet somit die schnelle und einfache Möglichkeit per Editor auf dem Webserver, oder innerhalb von WordPress, Änderungen vorzunehmen.

Für mich gehört dieses Plugin zum Standard, wenn ein Childtheme unter WordPress genutzt wird.

WordPress Plugin child-theme-check