Direkt zum Inhalt

Cookie-Einstellungen

Wählen Sie, welche Arten von Cookies Sie erlauben. Sie können Ihre Auswahl jederzeit über Cookie-Einstellungen unten auf jeder Seite ändern. Datenschutzerklärung

Notwendig

Immer aktiv

Nötig zum Einloggen, für Ihren Warenkorb und um Ihre Auswahl zu speichern. Diese sind immer aktiv.

Welche Cookies?
  • weboke_sessie, weboke_klant, weboke_remember: Ihre Sitzung und eingeloggt bleiben
  • weboke_basket: Ihr Warenkorb
  • wkBtwIncl: Preise mit oder ohne MwSt. anzeigen
  • wok_cookies: Ihre Cookie-Auswahl, 12 Monate

Misst, welche Anzeige zu einem Besuch oder einer Bestellung führt, damit wir nicht für Anzeigen zahlen, die nichts bringen.

Welche Cookies?
  • Google Ads über Google Tag Manager (_gcl_au, _gcl_aw), bis zu 90 Tage
  • OpenAI Ads, Anzeigen in ChatGPT
  • wok_aff: über welchen Partner Sie zu uns kamen (Partnerprogramm), 60 Tage

4,6

Land und Sprache

Jedes Land hat seine eigene Website, mit Preisen und MwSt. dieses Landes.

Anzeigen

Modul 7 · 7.4

Deutsch

Die Website härten: Berechtigungen, Header und Sicherheits-Plugins

Modul 7: Sicherheit · Lesezeit: 10 Minuten

Lernziel: Nach dieser Lektion können Sie eine WordPress-Website mit Berechtigungen, Einstellungen und Sicherheits-Headern härten und Sicherheits-Plugins richtig einschätzen.

Kernbegriffe: Härten (Hardening), Dateirechte (644, 755), DISALLOW_FILE_EDIT, kein PHP in Uploads, Verzeichnisauflistung, Version verbergen, X-Powered-By, Sicherheits-Header, Backup-Dateien und .git im Webverzeichnis, WAF auf dem Server, WAF in einem Plugin, Malware-Scanner

Was Härten bedeutet

Härten bedeutet: die Website so einstellen, dass ein Fehler oder eine Sicherheitslücke weniger Schaden anrichten kann. Es ersetzt nicht Updates und starke Passwörter (Lektion 7.2 und 7.3), verringert aber die Folgen. Denken Sie an ein Haus: Updates sind die Schlösser, Härten sorgt dafür, dass ein Einbrecher, der trotzdem drin ist, nicht an den Tresor kommt.

Dateirechte

Jede Datei und jedes Verzeichnis auf dem Server hat Rechte: wer darf lesen, schreiben und ausführen. Sie werden als drei Ziffern geschrieben, für den Eigentümer, die Gruppe und den Rest der Welt. Die Richtlinie aus der Dokumentation von WordPress:

WasRechteBedeutung
Verzeichnisse755Eigentümer darf alles, andere dürfen lesen und öffnen
Dateien644Eigentümer darf lesen und schreiben, andere nur lesen
wp-config.phpstrenger, zum Beispiel 600 oder 640Nur der Eigentümer (und gegebenenfalls die Webservergruppe) darf lesen

Welcher Wert für wp-config.php funktioniert, hängt davon ab, wie Ihr Hoster PHP ausführt: Bei den meisten Shared-Hosting-Umgebungen läuft PHP als Ihr eigener Benutzer, und dann reicht 600. Probieren Sie es aus und prüfen Sie, ob die Website noch funktioniert.

Niemals 777. Das bedeutet: Jeder auf dem Server darf schreiben. Eine Anleitung, die sagt „Setzen Sie das Verzeichnis auf 777, wenn das Hochladen nicht funktioniert", löst das Problem falsch. Bei gutem Hosting ist das auch nie nötig.

Einstellungen in wp-config.php

Ein paar Zeilen, die viel ausmachen (oberhalb von „Stop editing"):

// Keine Dateien aus dem Dashboard heraus bearbeiten (Design > Theme-Editor und Plugins > Plugin-Editor).
define( 'DISALLOW_FILE_EDIT', true );

// Fehlermeldungen niemals auf dem Bildschirm von Besuchern (Lektion 5.4).
define( 'WP_DEBUG', false );

Mit DISALLOW_FILE_EDIT verschwindet der Editor, mit dem Sie im Dashboard PHP-Dateien von Themes und Plugins anpassen können. Ein Einbrecher, der ein Administratorkonto übernimmt, kann dann nicht mit zwei Klicks schädlichen Code in Ihr Theme setzen. Sie können weiterhin Plugins installieren; wollen Sie das auch verbieten (zum Beispiel bei einer Website, die Sie für einen Kunden verwalten), gibt es DISALLOW_FILE_MODS, aber dann funktionieren auch Updates über das Dashboard nicht mehr.

Kein PHP in Uploads, keine Verzeichnisauflistung

In wp-content/uploads gehören Bilder und Dokumente, niemals PHP-Dateien. Einbrecher, die über eine Sicherheitslücke eine Datei hochladen können, versuchen genau dort eine PHP-Datei zu platzieren und sie dann aufzurufen. Blockieren Sie das mit einer .htaccess im Verzeichnis uploads (bei LiteSpeed und Apache):

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

Schalten Sie auch die Verzeichnisauflistung aus. Ohne index.php oder index.html in einem Verzeichnis zeigen manche Webserver eine Liste aller Dateien an („Index of /wp-content/uploads/2026/11"). Das ist ein Schaufenster für alle, die nach Backups oder sensiblen Dokumenten suchen. In der .htaccess Ihres Webverzeichnisses:

Options -Indexes

Viele Hoster haben dies bereits standardmässig deaktiviert. Die Aufgabe dieser Lektion prüft es.

Keine Reste im Webverzeichnis

Alles im Webverzeichnis ist über das Web abrufbar, ausser was der Server als PHP ausführt oder blockiert. Gefährlich sind:

  • Kopien von wp-config.php (wp-config.php.bak, wp-config.old, wp-config.php~ von einem Texteditor): Die enthalten Ihr Datenbankpasswort und werden als Text ausgeliefert (Lektion 1.3);
  • Backups wie backup.zip, site.tar.gz oder database.sql im Webverzeichnis;
  • ein .git-Verzeichnis von einem Entwickler, womit jemand Ihren gesamten Code (und manchmal Passwörter) herunterladen kann;
  • debug.log in wp-content (Lektion 5.4);
  • alte Installations- oder Testdateien wie info.php mit phpinfo().

Bewahren Sie Backups ausserhalb des Webverzeichnisses oder ausserhalb des Servers auf, und räumen Sie Reste weg.

Version verbergen: kleiner Gewinn

WordPress setzt standardmässig in das HTML:

<meta name="generator" content="WordPress 7.1.4" />

und dasselbe im RSS-Feed. Auch PHP meldet sich manchmal in einem Header: X-Powered-By: PHP/8.3.14. Das zu verbergen ist sinnvoll, aber erwarten Sie nicht zu viel davon: Die Programme von Einbrechern probieren eine Sicherheitslücke einfach aus, unabhängig von der Version, die Sie zeigen, und Versionen lassen sich oft auch aus ?ver= hinter Skripten ableiten. Verbergen ist Aufräumen, keine Sicherheit. Eine Website, die ihre Version verbirgt, aber nicht aktualisiert wird, ist genauso verwundbar.

So machen Sie es, in einem eigenen kleinen Plugin oder in functions.php Ihres Child-Themes:

remove_action( 'wp_head', 'wp_generator' );
add_filter( 'the_generator', '__return_empty_string' );

Und den PHP-Header mit expose_php = Off in den PHP-Einstellungen Ihres Hosters (bei DirectAdmin in Select PHP version, Options), oder mit Header unset X-Powered-By in .htaccess.

Sicherheits-Header

Mit ein paar Headern teilen Sie dem Browser mit, wie er mit Ihrer Website umgehen soll. Die wichtigsten:

HeaderWas er bewirkt
Strict-Transport-SecurityNur noch über https (Lektion 3.1)
X-Content-Type-Options: nosniffDer Browser rät nicht, um welche Art von Datei es sich handelt; verhindert, dass ein hochgeladenes „Bild" als Skript ausgeführt wird
X-Frame-Options: SAMEORIGIN oder Content-Security-Policy: frame-ancestors 'self'Andere Websites dürfen Ihre Website nicht in einem Frame anzeigen; verhindert Clickjacking (eine unsichtbare Schaltfläche Ihrer Website unter der einer anderen)
Referrer-Policy: strict-origin-when-cross-originBei einem Klick auf eine andere Website wird nur Ihr Domainname mitgesendet, nicht die vollständige Adresse
Permissions-PolicySchaltet Browserfunktionen aus, die Ihre Website nicht verwendet (Kamera, Mikrofon, Standort)
Content-Security-PolicyBestimmt genau, aus welchen Quellen Skripte und Stile stammen dürfen. Wirkungsvoll, aber mit WordPress und Plugins schwer richtig hinzubekommen; beginnen Sie mit dem Modus Report-Only

In .htaccess (bei LiteSpeed und Apache):

<IfModule mod_headers.c>
Header always set X-Content-Type-Options "nosniff"
Header always set X-Frame-Options "SAMEORIGIN"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
Header always set Permissions-Policy "camera=(), microphone=(), geolocation=()"
</IfModule>

Testen Sie danach, ob alles funktioniert: eingebettete Inhalte, Zahlungs-Buttons, ein Chat-Widget. Externe Werkzeuge wie securityheaders.com und internet.nl zeigen, was Ihre Website sendet.

Sicherheits-Plugins, ehrlich betrachtet

Es gibt viele Sicherheits-Plugins (zum Beispiel Wordfence, Solid Security, All-In-One Security, Sucuri). Sie bündeln häufig: eine Firewall, einen Malware-Scanner, Login-Schutz, Zwei-Faktor-Authentifizierung, Benachrichtigungen und eine Härtungsliste. Nützlich, aber mit Grenzen:

  • Eine Firewall in einem Plugin (WAF) startet erst, wenn PHP läuft. Eine böswillige Anfrage muss zuerst durch den Webserver und PHP, bevor das Plugin sie sieht. Eine Sicherheitslücke in einer PHP-Datei, die direkt aufgerufen wird, oder ein Angriff, der PHP selbst stark belastet, hält es nicht immer auf. Eine Firewall auf dem Server (zum Beispiel ModSecurity, Imunify360 oder eine Firewall Ihres Hosters) sitzt früher in der Kette und stoppt mehr, ohne dass Ihr Paket die Rechenarbeit übernimmt. Fragen Sie Ihren Hoster, was auf dem Server läuft.
  • Ein Scanner findet im Nachhinein. Ein Malware-Scanner teilt Ihnen mit, dass etwas nicht stimmt. Das ist wertvoll, verhindert aber nichts. Und ein Scanner auf demselben Server wie eine gehackte Website kann selbst auch vom Einbrecher verändert worden sein.
  • Sie ersetzen keine Updates. Ein Plugin mit einer bekannten Sicherheitslücke bleibt verwundbar, auch mit einem Sicherheits-Plugin daneben. Manche Sicherheitsdienste bieten „virtuelle Patches", die bekannte Angriffe abwehren, bis Sie aktualisiert haben; praktisch als Überbrückung, nicht als Ersatz.
  • Sie sind selbst ein Plugin. Mehr Code, mehr zu aktualisieren, manchmal selbst eine Sicherheitslücke. Und zwei Sicherheits-Plugins gleichzeitig kollidieren oft.
  • Sie kosten Rechenleistung, vor allem Scanner, die auf Ihrem eigenen Server laufen.

Eine vernünftige Wahl: Schauen Sie zuerst, was Ihr Hoster bereits tut (Firewall, Malware-Scan, Blockieren von Login-Versuchen). Ergänzen Sie, was fehlt, meist Zwei-Faktor-Authentifizierung und die Begrenzung von Login-Versuchen. Ein umfangreiches Sicherheits-Plugin ist vor allem nützlich bei Hosting, das selbst wenig tut.

Zusammenfassung

  • Härten begrenzt den Schaden eines Fehlers oder einer Sicherheitslücke; es ersetzt nicht Updates und Passwörter.
  • Verzeichnisse 755, Dateien 644, wp-config.php strenger; niemals 777.
  • Schalten Sie DISALLOW_FILE_EDIT ein, blockieren Sie PHP in Uploads, schalten Sie Verzeichnisauflistungen aus und räumen Sie Backups, .git und debug.log aus dem Webverzeichnis.
  • Version verbergen ist Aufräumen, keine Sicherheit; Sicherheits-Header helfen dem Browser, Ihre Besucher zu schützen.
  • Eine Firewall auf dem Server hält mehr auf als ein Plugin; Sicherheits-Plugins sind eine Ergänzung, kein Ersatz.

Quiz

1. Eine Anleitung sagt: „Setzen Sie wp-content auf 777, wenn das Hochladen nicht klappt." Was halten Sie davon?



2. Was bewirkt DISALLOW_FILE_EDIT?



3. Warum sitzt eine Firewall auf dem Server früher in der Kette als eine Firewall in einem Plugin?



4. Sie haben den Generator-Tag entfernt. Ist Ihre Website jetzt sicher vor Sicherheitslücken in alten Versionen?



5. Welcher Header verhindert, dass eine andere Website Ihre Website in einem unsichtbaren Frame lädt?



Aufgabe

Aufgabe A7.4: Was zeigt Ihre Website jedem? Geben Sie die Adresse Ihrer Website ein. Das Programm liest die Startseite und den RSS-Feed (/feed/) und prüft: Steht keine WordPress-Version im Generator-Tag des HTML und des Feeds, zeigt der Header X-Powered-By keine PHP-Version, und sendet Ihre Website X-Content-Type-Options: nosniff, einen Schutz vor Frames (X-Frame-Options oder frame-ancestors) und eine Referrer-Policy? HSTS (Lektion 3.1) und Permissions-Policy dürfen fehlen (orange).

Aufgabe A7.4: Was zeigt Ihre Website jedem?


Was Sie eingeben und was wir finden, speichern wir nicht. Ihr Browser merkt sich Ihre Antworten und ob Sie die Aufgabe bestanden haben. Sind Sie angemeldet, speichern wir in Meine Kurse nur, dass Sie die Aufgabe (fast) richtig hatten; auch das können Sie dort löschen.

Aufgabe A7.4b: Keine Reste im Webverzeichnis. Weisen Sie nach, dass es Ihre eigene Website ist (TXT-Eintrag oder Datei mit dem Code der Aufgabe). Das Programm fragt danach eine kurze feste Liste ab: das Verzeichnis /wp-content/uploads/ (keine Verzeichnisauflistung), /.git/HEAD, /wp-content/debug.log und ein paar häufige Namen von Kopien von wp-config.php. Gut ist, wenn keiner davon Inhalt zurückgibt (404 oder 403). Das Programm probiert nichts anderes aus und ändert nichts.

Aufgabe A7.4b: Keine Reste im Webverzeichnis

Diese Kontrolle fragt Pfade ab, die Sie nur bei Ihrer eigenen Website überprüfen lassen. Klicken Sie zuerst auf "Meinen Code anzeigen" und setzen Sie diesen Code als TXT-Eintrag auf _weboke-cursus.<ihre domain> oder als Datei auf Ihrer Website (siehe die Erklärung beim Code).


Was Sie eingeben und was wir finden, speichern wir nicht. Ihr Browser merkt sich Ihre Antworten und ob Sie die Aufgabe bestanden haben. Sind Sie angemeldet, speichern wir in Meine Kurse nur, dass Sie die Aufgabe (fast) richtig hatten; auch das können Sie dort löschen.

Weiterführende Informationen

Diese Artikel beschreiben die Schritte in den Paneelen von WebOké; in anderen Paneelen funktionieren sie ähnlich.

Einen Moment bitte…

Richten Sie Ihre Domains ein

Legen Sie für jede Domain die Nameserver, die Verknüpfung mit Ihrem Hosting und den künftigen Inhaber fest.

Ihre Domains werden geladen…