WordPress-Anmeldung über htaccess

erstellt am: // von: // Kategorie(n): Internet, PHP, Programmierung, Server, Wordpress

Ich betreibe schon seit einiger Zeit WordPress-Seiten hinter htaccess-Logins. Damit ich mich nicht zweimal in WordPress anmelden muss, habe ich lange Zeit einen Code-Schnipsel benutzt, der sich „Auto Login“ für WordPress nennt und als Plugin daher kommt.

Mit diesem Plugin ist es nicht mehr nötig, sein Passwort in WordPress einzugeben, sondern man ist sofort mit dem Aufruf der Website angemeldet, sofern WordPress einen zum htaccess-Nutzer gleichnamigen Nutzer kennt. Das verlockt natürlich dazu die WordPressbenutzer einfach mit einem ganz einfachen Passwort anzulegen, da die eigentliche Authentifizierung ja über htaccess läuft.

Das Skript hat auch soweit funktioniert, da selbst, wenn man sich mit einem anderen Benutzer angemeldet hat, das Skript eingegriffen hat und man sofort wieder mit seinem eigenen Benutzer angemeldet ist. Allerdings habe ich dabei übersehen, dass sich die XML-Schnittstelle von WordPress nicht um dieses Plugin gekümmert hat und es so möglich war, sich mit der App als jeder andere Benutzer anzumelden und da ich sehr einfache Passwörter verwendet habe, konnte so jeder Benutzer sofort zum Admin werden.

Diese Lücke habe ich jetzt in einer neuen Version des Skriptes gepatched, was Sie unter diesem Artikel finden und gerne auch in Ihrer WordPress-Installation einsetzen können. Das neue Skript ist zu dem aktuellen WordPress voll kompatibel und ersetzt die Benutzerauthentifizierung von WordPress komplett. Das heißt die Benutzer können sich auch über die App bei WordPress anmelden, indem sie als Benutzer und Passwort beliebigen Text eintragen, auf anmelden klicken und dann in dem htaccess-Dialog der App korrekt anmelden. Und es ich nun definitiv nicht mehr möglich, als ein anderer Benutzer, als der htaccess-Benutzer bei WordPress angemeldet zu sein.

<?php
/*
Plugin Name: Auto Login
Plugin URI: http://aprz.de
Description: Automatically tries to login from the htaccess user name
Version: 1.0
Author: Abraham Przewodnik, based on sample code by Leon Bukhman and Gaspard Petit
*/

/* 
	Replace WordPress' Authentication-function with a function that returns the 
	corresponding WordPress-User for the logged in htaccess user as long as this 
	user is NOT in the group blocked.
	
	This makes ANY WordPress functions use the new htaccess-Authentication. The
	original authentication-methods won't be called. So it doesn't matter which
	username or password the user submits over the API or a login-form.
*/
add_filter( 'authenticate', 'htaccess_auth', 10, 3 );
function htaccess_auth( $user = "", $username = "", $password = ""){
    $username = isset($_SERVER['PHP_AUTH_USER']) 
    				? $_SERVER['PHP_AUTH_USER'] : false;
    $user = get_user_by('login', $username);
    if ($user && !in_array("blocked", $user->roles)) return $user;
}

/*
	Login the current htaccess-user automatically when any page is rendered
*/
add_action('init', 'auto_login');
function auto_login() {
	$user = htaccess_auth();
	if ($user) {
		wp_set_current_user($user->ID, $user->user_login);
		if (wp_validate_auth_cookie() != $user->ID) wp_set_auth_cookie($user->ID);
		do_action('wp_login', $user->user_login);
	} elseif (is_user_logged_in()) {
		wp_clear_auth_cookie();
		do_action('wp_logout');
		wp_set_current_user(0);
	}
}

Kommentare

Bisher wurden noch keine Kommentare geschrieben

Eigenen Kommentar verfassen

(wird nicht veröffentlicht)

Wenn Sie dieses Formular abschicken, speichert diese Seite Ihren Namen, Ihre Email und Ihre Webseite in Form von Browser-Cookies, sodass Sie diese Informationen nicht erneut eintippen müssen. Durch Abschicken dieses Formulars stimmen Sie dem Setzen dieser Cookies zu.