Schlagwort-Archive: sicherheit

Der eine Trick um WordPress abzusichern – htaccess-Passwort auf wp-admin

Ja, der erste Teil der Überschrift ist dem aktuellen Stil in den Redaktionen dieser Welt geschuldet. Aber, man möge mir verzeihen :)

Immerhin sagt der zweite Teil der Überschrift eh, worum es geht, nämlich um Absichern von wp-admin mittels htaccess-Passwort.

Wozu das alles?

tl;dr

  • Das wp-admin-Verzeichnis sollte per .htaccess abgesichert werden!
  • Dadurch schließt man ohne Plugin viele potentielle Sicherheitslücken und Angriffsvektoren

 

Der nette Angreifer aus der Nachbarschaft!

Wir haben eine neue Seite aufgesetzt und in den erste Tagen beobachtet, welche Zugriffe passieren. Ohne SEO, ohne Werbung o.ä.

Es tut sich logischerweise nicht viel, aber was sich tut ist augenscheinlich.

WIR WERDEN ANGEGRIFFEN!111omfg

Angriffsziele die es abzusichern gilt
Worauf es Angreifer abgesehen haben und was wir absichern werden!

WordPress ist einer der sichersten Webanwendungen – aber jede Software hat ihre Schwächen. Mit jedem installierten Plugin kommt eine potenzielle Schwachstelle dazu.

Und wenn dann noch Plugins aus dubiosen Quellen installiert wird, schlägt man die Tür für Angreifer weit auf.

 

Und danach suchen Angreifer. Nach Schwächen in installierten WordPress-Plugins. Nach Einfallstoren.

Das passiert nicht händisch, sondern diese „Angriffe“ werden automatisch durchgeführt. Mit Bots. Angriffe in Anführungszeichen, weil das erstmals nur Austesten von Schwachstellen sein kann.

In obigem Screenshot sieht man sehr gut, worauf die Bots Lust haben:

Auf das wp-Admin-Verzeichnis.

wp-admin Verzeichnis absichern

Klar! Das wp-admin-Verzeichnis steht für das Backend von WordPress, für die Administrationsansicht.

Da würden Angreifer gern hinein.

Das abzusichern ist wirklich der einfachste Trick überhaupt – deshalb auch die reißerische Überschrift!

Dafür brauch ich kein Plugin, ich muss nix installieren und es geht so gut wie gar keine Funktionalität für eine normale 08/15 Webseite verloren.

Was also tun?

htaccess-Passwort setzen

Um das wp-admin-Verzeichnis abzusichern, muss man auf das Verzeichnis einfach mit htaccess absichern!

Also einen Usernamen und ein Passwort für das wp-admin Verzeichnis anlegen.

Das funktioniert bei den diversen Hostern ähnlich, schaut naturgemäß aber ein Bisserl anders aus. Als Hilfestellung hier ein paar Tutorials der bekannteren Hoster:

 

Wie schaut dann der Zugriff auf wp-admin aus? Bitteschön, kann man gerne anhand unseres Blogs probieren:

https://wp-entwickler.at/wp-admin

Es erscheint ein Dialog, ähnlich wie dieser hier:

htaccess User und Passwort Abfrage
Abgesichertes wp-admin Verzeichnis mittels htaccess

Jetzt ist das wp-admin Verzeichnis abgesichert und die meisten Angriffe laufen in’s Leere.

Denn der Angreifer (oder auch interessierte Besucher, die den Link oben angeklickt haben) bekommen das hier zu sehen:

nicht erlaubter Zugriff auf wp-admin
Wenn man den Usernamen und das Passwort nicht kennt, kann man wp-admin nicht ordentlich aufrufen!

Ein Bonuspunkt ist noch, dass man dadurch keinen komplizierten Plugincode braucht, der Zugriffe auf die Seite überprüfen müsste.

Conclusio

  • Viele Angriffe konzentrieren sich auf die billigen Einfallstore
  • Dateien im wp-admin Verzeichnis sind ein interessantes Ziel
  • Wenn ich das wp-admin Verzeichnis mit einem htaccess-Passwort versehe, dann kann ich viele Angriffe abwehren.
  • Eine gute und weiterführende Info ist wie immer Selfhtml zum Thema Passwortschutz.

Nonces in WordPress

Im WP-Kontext sind Nonces eine zufällige Aneinanderreihung von Zahlen und Buchstaben, die zwar mehrmals verwendet werden (im Gegensatz zur üblichen Implementierung von Nonces – Number used once), aber ein klar definiertes Ablaufdatum haben.

Wie bereits im Artikel WordPress Sicherheit bei Formulareingaben und AJAX Aufrufen – verwendet Nonces! beschrieben wurde, sollen Nonces dabei helfen, URLs und Formulare auf Websites vor missbräuchlicher Benutzung und anderem Unfug zu schützen.

Erstellung

URLs

werden mit wp_nonce_url( $actionurl, $action, $name ); aufgerufen.

  • $actionurl ist die URL, die wir mit der Nonce „absichern“ wollen.
    • required; Default: None
  • $action ist der Name der action, die wir frei wählen können.
    • optional; Default: -1
  • $name ist der Name der so generierten Nonce.
    • optional; Default: _wpnonce

Als Rückgabewert erhalten wir eine bereinigte URL mit zusätzlicher Nonce. Diese sieht in etwa so „http://example.com/wp-admin/post.php?post=123&action=trash&_wpnonce=b192fc4204“ aus.

Forms

werden mit wp_nonce_field( $action, $name, $referer, $echo ); aufgerufen. Diese Funktion generiert uns bis zu zwei hidden input Elemente.

  • $action definiert den Namen der action.
    • optional, aber empfohlen; Default: -1
  • $name ist der Name der so generierten Nonce.
    • optional. Default: _wpnonce
  • $referer gibt an, ob ein zusätzliches hidden input Element erstellt werden soll, das den Output der Funktion wp_referer_field beinhaltet.
    • optional; Default: true
  • $echo gibt an, ob die so erstellten inputs im HTML ausgegeben werden.
    • optional; Default: true

Als Rückgabewert erhalten wir ein oder zwei hidden input Elemente, wenn $referer true ist.

Beispiel für wp_nonce_field in Formularen.

Validierung

Allgemein

check_admin_referer( $action, $name ); überprüft sowohl die Nonce als auch den $referer.

  • $action ist der Name der action, die wir frei wählen können.
    • optional; Default: -1
  • $name ist der Name der so generierten Nonce.
    • optional; Default: _wpnonce
AJAX

check_ajax_referer( $action, $query_arg, $die ); überprüft nur die Nonce im Zuge eines AJAX-Requests.

  • $action ist der Name der action, die wir frei wählen können.
    • optional; Default: -1
  • $query_arg ist der Name der so generierten Nonce
    • optional; Default: false
  • $die gibt an, ob das script angehalten werden soll, wenn die Überprüfung fehlschlägt
    • optional; Default: true
Basic

wp_verify_nonce( $nonce, $action ); überprüft nur die Nonce.

  • $nonce ist der Name der Nonce, die überprüft werden soll.
    • required; Default: None
  • $action ist der Name der action.
    • optional; Default: -1

Eine einfache Überprüfung könnte z.B. so aussehen:

Validierung der wp-nonce mit wp_verify_nonce.

Weiterführende Informationen:

Update vom 10. Juli. 2018:
In der Wikipedia gibt es jetzt eine Erklärung zum Begriff „Nonce“:
https://de.wikipedia.org/wiki/Nonce