WordPress Sicherheit

Sie sitzen um einen großen Tisch herum, jeder Freund mit einem Notizblock und einem Stift, und diskutieren und bewerten verschiedene Lösungen und Optionen für ihren ersten Einsatz in WordPress Sicherheit.

Table of content

Vielleicht hast du auch das Gefühl, dass du hinter der Sicherheit deiner WordPress Installation gar nicht mehr so richtig hinterher kommst?

Machst du auch jeden Tah Updates und denkst dir trotzdem: “Man, schon wieder? Wie oft denn noch?”

Dabei ist es gar nicht so schwer, WordPress als solches so abzusichern, dass du beruhigt schlafen kannst.

Die einzelnen Schritte

Im folgenden zeige ich dir ein paar Schritte, die du unternehmen kannst, um deine Seite zunächst grundsätzlich zu schützen.

Einzelne Container

Stell dir vor, deine WordPress-Seiten sind wie eine Sammlung wertvoller Bücher. Jedes Buch verdient seinen eigenen Platz im Regal, um sicher und ordentlich aufbewahrt zu werden. Wenn du alle Bücher wahllos aufeinanderstapelst, riskierst du, dass sie beschädigt werden, durcheinandergeraten oder sogar verloren gehen.

Genauso ist es mit deinen WordPress-Seiten. Jede Seite braucht ihren eigenen WebUser-Ordner, um ihre Integrität und Funktionalität zu gewährleisten.

Warum also jede WordPress-Seite in ihren eigenen Container packen?

  • Sicherheit: Jeder Container ist wie ein Tresor für deine Seite. Wenn eine Seite kompromittiert wird, sind die anderen Seiten geschützt.
  • Performance: Jede Seite verfügt über ihre eigenen Ressourcen und läuft unabhängig von den anderen. Das bedeutet schnellere Ladezeiten und reibungslose Abläufe.
  • Flexibilität: Du kannst jede Seite individuell verwalten, aktualisieren und anpassen, ohne die anderen Seiten zu beeinträchtigen.
  • Organisation: Jeder Container ist wie ein gut sortiertes Bücherregal. Du findest alles schnell und vermeidest Durcheinander.

Indem du jede WordPress-Seite in ihren eigenen Container packst, sorgst du für optimale Sicherheit, Performance, Flexibilität und Organisation. Deine Seiten werden es dir mit stabiler Funktionalität und problemlosem Betrieb danken.

XML-RPC deaktivieren 

Stell dir vor, dein Haus hat eine Hintertür, die keiner benutzt, aber die immer offen steht. Klingt nach einer Einladung für unerwünschte Gäste, oder? Genau so ist es mit dem WP XML-RPC – eine offene Hintertür für deine Website.

Warum deaktivieren? Na, du willst ja nicht, dass Hacker einfach hereinschlendern und Chaos anrichten! XML-RPC war mal nützlich für externe Anwendungen, aber heutzutage wird es selten gebraucht und oft missbraucht.

Und wie machst du die Tür zu? Ganz einfach – füge zum Beispiel dieses in deine .htaccess ein für ältere Apache < 2.4:

<Files xmlrpc.php>
   Order Deny,Allow
   Deny from all
</Files>

Für Apache 2.4:

<Files xmlrpc.php>
   Require all denied
</Files>

Du kannst auch Plugins nutzen, zum Beispiel HideMyWPGhost, oder andere. Diese Plugins bieten eine einfachere Möglichkeit, XML-RPC mit wenigen Klicks zu deaktivieren, anstatt deinen Code anzuapssen.

Warum also XML-RPC deaktivieren?

  • Sicherheit: Durch das Deaktivieren von XML-RPC schließt du eine potenzielle Einfalltür für Angriffe und schützt deine Seite vor unbefugtem Zugriff.
  • Performance: XML-RPC kann unnötige Anfragen verarbeiten und dadurch deine Serverressourcen belasten. Das Deaktivieren verbessert die Leistung deiner Seite.
  • Schutz vor Brute-Force-Angriffen: XML-RPC ist ein häufiges Ziel für Brute-Force-Angriffe, bei denen Hacker versuchen, Passwörter zu erraten. Das Deaktivieren erschwert solche Angriffe.

WP JSON Restriction

Stell dir vor, deine WordPress-Seite ist ein exklusiver Club mit verschiedenen Räumen. Du möchtest nicht, dass jeder Gast Zugang zu jedem Raum hat. 

Manche Räume sind für Mitglieder reserviert, andere für spezielle Veranstaltungen.Genauso ist es mit der WordPress JSON REST API. Du kannst den Zugang zu bestimmten Endpunkten einschränken, um deine Daten zu schützen und die API-Nutzung zu kontrollieren.

Wie schränkt man die WordPress JSON REST API ein?

Eine Möglichkeit, mit custom code:

<?php 

add_filter( 'rest_authentication_errors', function( $result ) {
    if ( ! empty( $result ) ) {
        return $result;
    }

    // Erlaube den Zugriff auf spezifische Endpunkte ohne Anmeldung
    $allowed_endpoints = array(
        '/wp-json/real-cookie-banner',
        '/wp-json/real-queue/v1/status',
        '/wp-json/wp/v2/posts',
        '/wp-json/wp/v2/pages',
    );

    // Hole den aktuellen REST-Anfragepfad
    $rest_route = isset( $_SERVER['REQUEST_URI'] ) ? esc_url_raw( wp_unslash( $_SERVER['REQUEST_URI'] ) ) : '';

    // Überprüfe, ob der Pfad `/consent` enthält
    if ( strpos( $rest_route, '/consent' ) !== false ) {
        // Wenn ja, erlaube den Zugriff
        return $result;
    }


    $rest_route = isset($_SERVER['REQUEST_URI']) ? esc_url_raw(wp_unslash($_SERVER['REQUEST_URI'])) : '';

    foreach ($allowed_endpoints as $endpoint) {
        // ob endpoint TEIL is
        // if (strpos($rest_route, $endpoint) !== false) { 
        // Ob endpoint AM ANFANG steht
        if (strpos($rest_route, $endpoint) === 0) { 
            return $result; // Erlaube den Zugriff, wenn der Endpunkt am Anfang des Pfads gefunden wird
        }
    }


    // Wenn der Benutzer nicht angemeldet ist und der Endpunkt nicht erlaubt ist, verweigere den Zugriff
    if ( ! is_user_logged_in() ) {
        return new WP_Error( 'rest_not_logged_in', 'Error - cannot help...', array( 'status' => 401 ) );
    }

    return $result;
});

Wir haben hier einige Filter eingebaut, die bestimmte Endpoints deiner Rest API erlauben, zum Beispiel die Cookie Abfrage.

Indem du den Zugriff auf die WordPress JSON REST API einschränkst, erhöhst du die Sicherheit deiner Seite, optimierst die Leistung und schützt sensible Daten. Es ist ein wichtiger Schritt, um deine API verantwortungsbewusst zu nutzen.

Alternative Ansätze:

  • Plugins: Wie bereits erwähnt, bieten Plugins wie “Restrict JSON REST API” eine benutzerfreundlichere Oberfläche und mehr Funktionen zur Einschränkung des API-Zugriffs.
  • Feingranulare Berechtigungen: Für komplexere Anwendungsfälle kannst du die WordPress-eigenen Rollen und Rechte nutzen, um den Zugriff auf bestimmte Endpunkte oder Aktionen innerhalb eines Endpunkts basierend auf Benutzerrollen zu steuern.
  • Authentication Headers: Für eine noch feinere Kontrolle kannst du benutzerdefinierte Authentifizierungs-Header verwenden, um den Zugriff auf bestimmte Endpunkte oder Aktionen auf bestimmte Benutzer, Anwendungen oder Tokens zu beschränken.

Zusammenfassung WP JSON:

Die Entscheidung, welche Methode zur Einschränkung der WordPress JSON REST API am besten geeignet ist, hängt von deinen spezifischen Anforderungen, deinem technischen Know-how und der Komplexität deiner Anwendung ab. Wenn du Fragen hast, hinterlasse mir gern einen Kommentar, oder kontaktiere mich.

IP Address Restriction

Du kannst das auch anders lösen: Stell dir vor, deine WordPress JSON REST API ist ein exklusives Restaurant, das nur für bestimmte Gäste zugänglich ist.

Du möchtest nicht, dass jeder von der Straße hereinspaziert und deine köstlichen Daten verspeist.

Stattdessen möchtest du den Zugang auf eine ausgewählte Gruppe von Gästen beschränken, beispielsweise nur auf diejenigen, die von deinem lokalen Netzwerk (localhost) kommen.

Warum also den Zugriff auf die WordPress JSON REST API per IP-Adresse einschränken?

  • Sicherheit: Indem du den Zugriff auf bestimmte IP-Adressen beschränkst, verhinderst du unbefugten Zugriff von außen und schützt deine sensiblen Daten.
  • Schutz vor Angriffen: Viele Angriffe auf WordPress-Websites zielen auf die REST API ab. Durch die IP-Beschränkung erschwerst du solche Angriffe erheblich.
  • Performance-Optimierung: Indem du unnötige Anfragen von unbekannten IP-Adressen blockierst, entlastest du deinen Server und verbesserst die Leistung deiner Website.

Die effektivste Methode ist die Konfiguration deines Webservers (Apache oder Nginx). Hier sind Beispiele für die Konfiguration in der .htaccess-Datei (Apache) oder der nginx.conf-Datei (Nginx):

Für Apache:

<FilesMatch "\.json$">
    Require all denied
    Require ip 127.0.0.1
</FilesMatch>

Für Nginx:

location ~ \.json$ {
    deny all;
    allow 127.0.0.1;
}

In meinem Beispiel erlauben wir den Zugriff nur von localhost, wenn du eine dynamische IP-Adresse hast, musst du die Konfiguration regelmäßig aktualisieren, da sich deine IP-Adresse ändern kann.

Achtung: Denke daran, Ausnahmen für Dienste oder Anwendungen zu machen, die auf deine REST API zugreifen müssen, z. B. mobile Apps oder externe Integrationen.

Indem du den Zugriff auf deine WordPress JSON REST API per IP-Adresse einschränkst, erhöhst du die Sicherheit deiner Website erheblich und schützt deine Daten vor unbefugtem Zugriff. Es ist eine einfache, aber effektive Maßnahme, um deine Website zu schützen.

WP Security Settings - Anleitung

Trag dich ein und lade dir dein Handbuch zum Thema WordPress Sicherheit herunter.

Das Handbuch wird permanent aktualisiert und steht dir gleich als Download zur Verfügung.

* Trag einfach deine E-Mail-Adresse ein, und schon bist du dabei! Wir freuen uns, dich mit den neuesten Updates zum Thema WordPress Sicherheit direkt in deinem Posteingang zu begrüßen.

Absicherung mit htpasswd

Du kannst dein wp-admin Verzeichnis durch eine htpasswd absichern. Dadurch verhindest du ungewollten Zugriff auf dein Backend.

Der wp-admin-Ordner ist das Kontrollzentrum deines Hauses. Du möchtest natürlich nicht, dass jeder einfach so Zugriff auf diese wichtigen Bereiche hat. Mit .htpasswd kannst du eine zusätzliche Sicherheitsschicht hinzufügen, indem du eine Passwortabfrage vor dem Zugriff auf diese Bereiche einrichtest.

Füge das in deine .htaccess ein, und erstelle ebenfalls die htpasswd Datei.

So erstellst du deine htpasswd mit der Command Line:

htpasswd -c /pfad/zu/deiner/.htpasswd benutzername

Tipp: wenn du keinen Zugriff auf die Command Line hast, kannst du auch Onlinegeneratoren nutzen. Es gibt diverse Tools dafür.

Das kommt in die .htaccess:

# Schutz für wp-admin
<Directory "/pfad/zu/deinem/wp-admin">
    AuthName "Geschützter Bereich"
    AuthType Basic
    AuthUserFile /pfad/zu/deiner/.htpasswd
    Require valid-user
</Directory>

Wichtige Hinweise:

  • Sicherheit der .htpasswd-Datei: Stelle sicher, dass die .htpasswd-Datei nicht öffentlich zugänglich ist.
  • Starke Passwörter: Verwende starke Passwörter für die Benutzer in der .htpasswd-Datei.
  • Testen: Überprüfe nach der Einrichtung, ob der Zugriff auf wp-admin nur noch mit der Passwortabfrage möglich ist. Nutze dafür eventuell einen anderen Browser.

Weniger ist mehr.

“Lieber weniger als zu viele Plugins.” ist die Devise. Stell dir vor, dein WordPress-Dashboard ist ein Werkzeugkasten. Du brauchst nur die Werkzeuge, die du tatsächlich benutzt. 

Zu viele Werkzeuge machen den Kasten unübersichtlich und schwer zu handhaben. Genauso ist es mit Plugins.Jedes Plugin, das du installierst, fügt Code hinzu, der deine Website verlangsamen, Sicherheitslücken öffnen oder Konflikte mit anderen Plugins verursachen kann.

Installiere eine Firewall

Eine Firewall, wie beispielsweise Ninja Firewall, ist ein essenzielles Werkzeug für die Sicherheit deiner WordPress-Website. Stell dir vor, deine Website ist ein Haus, und die Firewall ist ein Wachmann, der den Eingang kontrolliert. 

Der Wachmann prüft jeden Besucher und lässt nur diejenigen herein, die erwünscht sind. Ähnlich funktioniert eine Firewall,indem sie den Datenverkehr überwacht und schädliche Anfragen blockiert, bevor sie deine Website erreichen.

Warum eine Firewall für WordPress verwenden?

  • Schutz vor Angriffen: Eine Firewall schützt deine Website vor verschiedenen Arten von Angriffen, wie z.B.Brute-Force-Angriffen, SQL-Injection und Cross-Site-Scripting (XSS).
  • Blockierung von Bots: Eine Firewall kann unerwünschte Bots blockieren, die deine Website ausspionieren, Spam versenden oder Ressourcen verbrauchen.
  • Verbesserte Leistung: Durch das Blockieren von schädlichen Anfragen kann eine Firewall die Leistung deiner Website verbessern und die Serverlast reduzieren.

Ninja Firewall: Eine beliebte Wahl

Ninja Firewall ist eine beliebte Wahl für WordPress-Websites, da sie einfach zu bedienen ist und einen effektiven Schutz bietet. Sie bietet Funktionen wie:

  • Web Application Firewall (WAF): Schützt vor gängigen Angriffen auf Webanwendungen.
  • IP-Blockierung: Ermöglicht das Blockieren von IP-Adressen, die bösartige Aktivitäten zeigen.
  • Login-Schutz: Verhindert Brute-Force-Angriffe auf den WordPress-Login.
  • Malware-Scanning: Scannt deine Website regelmäßig nach Malware.
  • Security Header: du kannst CSFR unterbinden und Co durch zB Security Headers (kann man dann checken zB via securityheaders.com)

Es gibt auch andere Firewalls und Sicherheitslösungen, wie zum Beispiel WordFence, allerdings haben wir bisher die besten Erfahrungen mit NinjaFireWall gemacht.

Noch mehr Schutz – 2FA

Deine WordPress-Website ist ein Banktresor, der deine wertvollen Daten und Inhalte schützt. Ein starkes Passwort ist wie ein sicherer Schlüssel für diesen Tresor. 

Aber was passiert, wenn jemand diesen Schlüssel stiehlt oder errät? Hier kommt die Zwei-Faktor-Authentifizierung (2FA) ins Spiel. Sie fügt eine zusätzliche Sicherheitsschicht hinzu, indem sie einen zweiten Schlüssel verlangt, den nur du besitzt.

Warum 2FA und einzigartige Passwörter verwenden?

  • Schutz vor Passwortdiebstahl: Selbst wenn dein Passwort gestohlen wird, kann sich niemand ohne den zweiten Faktor in deine Website einloggen.
  • Verhinderung von Brute-Force-Angriffen: 2FA macht es für Angreifer praktisch unmöglich, dein Passwort durch wiederholtes Ausprobieren zu erraten.
  • Erhöhte Sicherheit für sensible Daten: Mit 2FA schützt du deine Website und die Daten deiner Nutzer vor unbefugtem Zugriff.

Wie funktioniert 2FA in WordPress?

  1. Installation eines 2FA-Plugins: Es gibt viele kostenlose und kostenpflichtige Plugins für WordPress, die 2FA anbieten, z. B. WordFence oder HideMyWPGhost und andere
  2. Aktivierung und Konfiguration: Nach der Installation musst du das Plugin aktivieren und konfigurieren. Du kannst verschiedene 2FA-Methoden auswählen, wie z. B.:
    • TOTP-Apps: Generieren Einmalpasswörter auf deinem Smartphone (z. B. Google Authenticator, Authy).
    • SMS-Codes: Senden Einmalpasswörter per SMS an dein Handy.
    • Backup-Codes: Können verwendet werden, wenn du keinen Zugriff auf deine TOTP-App oder dein Handy hast.
  3. Login mit 2FA: Nach der Aktivierung musst du bei jedem Login neben deinem Passwort auch den zweiten Faktor eingeben, um Zugriff auf deine Website zu erhalten.

Einzigartige Passwörter:

Neben 2FA ist es wichtig, für jeden Dienst, einschließlich deiner WordPress-Website, ein einzigartiges Passwort zu verwenden. 

Dadurch wird verhindert, dass ein kompromittiertes Passwort für andere Dienste verwendet werden kann, um auf deine Website zuzugreifen.

Bonus: Nutze nie auf mehreren Seiten dasselbe Passwort!!!

Tipps für starke Passwörter:

  • Länge: Verwende mindestens 12 Zeichen.
  • Komplexität: Kombiniere Groß- und Kleinbuchstaben, Zahlen und Sonderzeichen.
  • Einzigartigkeit: Verwende für jeden Dienst ein anderes Passwort.
  • Passwortmanager: Verwende einen Passwortmanager, um deine Passwörter sicher zu speichern und zu verwalten.

Indem du 2FA aktivierst und einzigartige, starke Passwörter verwendest, erhöhst du die Sicherheit deiner WordPress-Website erheblich und schützt deine Daten vor unbefugtem Zugriff.

WP Security Settings - Anleitung

Trag dich ein und lade dir dein Handbuch zum Thema WordPress Sicherheit herunter.

Das Handbuch wird permanent aktualisiert und steht dir gleich als Download zur Verfügung.

* Trag einfach deine E-Mail-Adresse ein, und schon bist du dabei! Wir freuen uns, dich mit den neuesten Updates zum Thema WordPress Sicherheit direkt in deinem Posteingang zu begrüßen.

Verschiebe die wp-config.php

Du kannst deine wp-config.php einfach verschieben, und sie in das übergeordnete Verzeichnis setzen.

Normalerweise sieht eine Struktur in deinem WordPress Verzeichnis so aus:

|
|
├── websitesite
│   ├── index.php
│   ├── license.txt
│   ├── liesmich.html
│   ├── readme.html
│   ├── wordfence-waf.php
│   ├── wp-activate.php
│   ├── wp-admin
│   ├── wp-blog-header.php
│   ├── wp-comments-post.php
│   ├── wp-config.php
│   ├── wp-config-sample.php
│   ├── wp-content
│   ├── wp-cron.php
│   ├── wp-includes
│   ├── wp-links-opml.php
│   ├── wp-load.php
│   ├── wp-login.php
│   ├── wp-mail.php
│   ├── wp-settings.php
│   ├── wp-signup.php
│   ├── wp-trackback.php
│   └── xmlrpc.php
|
├── anderes-verzeichnis

Wir verschieben nun die wp-config.php eine Ebene höher:

├── wp-config.php
|
├── websitesite
│   ├── index.php
│   ├── license.txt
│   ├── liesmich.html
│   ├── readme.html
│   ├── wordfence-waf.php
│   ├── wp-activate.php
│   ├── wp-admin
│   ├── wp-blog-header.php
│   ├── wp-comments-post.php
│   ├── wp-config-sample.php
│   ├── wp-content
│   ├── wp-cron.php
│   ├── wp-includes
│   ├── wp-links-opml.php
│   ├── wp-load.php
│   ├── wp-login.php
│   ├── wp-mail.php
│   ├── wp-settings.php
│   ├── wp-signup.php
│   ├── wp-trackback.php
│   └── xmlrpc.php
|
├── anderes-verzeichnis

Zusätzlich passen wir auch noch die Rechte der Datei an, zum Beispiel auf 640.

Installation von WordPress

Die Installation von WordPress sollte nicht mit dem 5-Minuten-Installer statt finden, sondern nur hinter einer .htaccess Absicherung oder noch besser mit wp-cli.

Heutzutage nutzen Angreifer viele verschiedene Wege, um deine Seite zu kapern.

Weitere Methoden

Du kannst weitere Schritte unternehmen, deine Seiten zu schützen, zum Beispiel kannst du die wp-login.php deaktivieren und alle Requests zur wp-login.php auf die 404-Seite weiterleiten.

Das erfordert allerdings noch weitere Anpassungen in deinem Code, zum Beispiel durch modifizierte Funktionen in deiner functions.php oder in einem CodeSnippet wie WPCodeBox.

Wenn du die wp-login.php deaktivierst oder auch löscht, musst du eigene Login Datei nutzen.

User Enumeration verhindern

Du möchtest nicht, dass ungebetene Gäste einfach die Namen aller Bewohner herausfinden und sich so Zugang verschaffen können. Genauso ist es mit User Enumeration bei WordPress. 

Dabei handelt es sich um Techniken, mit denen Angreifer versuchen, gültige Benutzernamen auf deiner Website zu identifizieren, um dann gezielte Angriffe wie Brute-Force-Attacken zu starten.

Warum User Enumeration verhindern?

  • Sicherheit: Indem du User Enumeration verhinderst, erschwerst du es Angreifern, Informationen über deine Benutzer zu sammeln und verringerst somit das Risiko von erfolgreichen Angriffen.
  • Datenschutz: Du schützt die Privatsphäre deiner Benutzer, indem du ihre Benutzernamen nicht öffentlich preisgibst.

Wie verhindert man User Enumeration in WordPress?

Es gibt verschiedene Methoden, um User Enumeration in WordPress zu verhindern – eine einfache ist Code in eine Code Snipptes Plugin:

function block_author_archives() {
    if (is_author() && !is_user_logged_in()) {
        wp_redirect(home_url());
        exit;
    }
}
add_action('template_redirect', 'block_author_archives');

Fazit

Neben den genannten Methoden kannst du serverseitig noch eine Firewall einsetzen, zB UFW, du kannst (und solltest) auch dein Verwaltungspanel (wenn vorhanden) durch htpasswd absichern, und natürlich regelmäßig Updates durchführen.

In der heutigen Zeit werden auch Cracks immer einfallsreicher, und dieser Beitrag gibt dir zumindest einen kleinen Einblick in die Möglichkeiten, die du nun hast.

Allerdings ist diese Liste auch keinesfalls vollständig, und du solltest möglichst immer ein Auge auf deine Sicherheit lenken und gegebenenfalls deine Strategien immer anpassen.

Wenn du Fragen zu dem Thema hast, hinterlasse mir gerne einen Kommentar, oder falls du direkt Hilfe bei der Umsetzung benötigst, buch doch einfach einen Termin für ein kurzes Gespräch – dann können wir am besten sehen, wie wir dir helfen können.

Jetzt zur WP Admin Community

Zu diversen Themen rund um WordPress gibt es eine Gruppe auf Facebook in der WP Admin Community.

Beteilige dich an der Diskussion, stelle Fragen und erfahre mehr!

Zur FB Gruppe

Related posts

Shared Hosting vs. Dedicated Server

Hosting: Shared vs eigener Server

Reading Time: 16:17 min

Shared Hosting und eigene Server unterscheiden sich in vielen Aspekten grundlegend voneinander. Beim Shared Hosting teilen sich mehrere Websites die Ressourcen eines Servers, was zu niedrigeren Kosten führt, aber auch…

View post
Designer vs Developer - wo sind die Unterschiede

Web Designer vs. Web Developer: Die Unterschiede verstehen

Reading Time: 9:11 min

Webdesigner/innen und Webentwickler/innen spielen bei der Erstellung von Websites unterschiedliche, aber sich ergänzende Rollen. Webdesigner/innen konzentrieren sich auf die visuellen Aspekte, einschließlich Layout, Farbgestaltung und Typografie.

View post
Logout Sicherheit Dashboard schützen.

Dein Admin-Dashboard schützen

Reading Time: 3:16 min

Dein Admin-Dashboard: Ein Schatz, den du schützen musst – mit Autologout nach 10 Miunuten. Logge dich automatisch nach 10 Minuten aus deinem Dashboard aus, um dich zu schützen. Du bist…

View post

Hinterlasse den ersten Kommentar