Don't know where to look?

You can search all my notes here

Automatische Anmeldung per htaccess

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.

autologin.php
php
<?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);
    }
}

Comments

Post-Meta
  • Published: July 15, 2019
  • Last modified: July 15, 2019
Included files
  • autologin.php
  • readme.md
Download all