toscho.design

WordPress: Zufallspasswort ohne Leerzeichen am Anfang oder am Ende

Hier und da erzeugt WordPress automagisch ein Passwort für die Nutzer. Das erledigt die Funktion wp_generate_password(). Wird deren dritter Parameter $extra_special_chars beim Aufruf auf TRUE gesetzt, kann das Passwort Leerzeichen enthalten. Und da die Zeichen zufällig verteilt werden, können die auch am Anfang oder am Ende stehen.

Das freut die Nutzer wenig, denn wenn sie nicht sehr genau aufpassen, übersehen sie diese fiese Detail und können sich nicht einloggen.

Darauf wurde ich erst heute gestoßen durch eine Frage auf WordPress Stack Exchange. Hier die Lösung als Plugin:

<?php # -*- coding: utf-8 -*-
/**
 * Plugin Name: T5 Trim Password
 * Description: Remove leading and trailing spaces from automatically generated passwords
 * Plugin URI:  http://toscho.de/?p=2299
 * Version:     2012.09.13
 * Author:      Thomas Scholz
 * Author URI:  http://toscho.de
 */
add_filter( 'random_password', 'trim' );

Den Code gibt es wie üblich auf GitHub. Ich empfehle, es MU-Plugin zu installieren.

6 Kommentare

  1. Dirk am 13.09.2012 · 23:20

    Ist das wirklich ein "Plugin" wert? Klingt mir eher nach einem Fall für den Bug-Tracker.

  2. Thomas Scholz am 13.09.2012 · 23:51

    @Dirk: Da hast du natürlich Recht. Aber wenn ich ein Ticket eröffne, wird es garantiert nicht gefixt. :/

  3. Dominik am 14.09.2012 · 00:43

    Wenn ich mir den Core so anschaue, ist bei der Verwendung für ein Passwort der Parameter auf false gesetzt. Einzige Ausnahme scheint der Importer zu sein.

  4. Thomas Scholz am 14.09.2012 · 00:56

    @Dominik: Plugins können die Funktion auch benutzen, für Einmalpassworte zum Beispiel. Möchte man hier einen möglichst breiten Zeichenumfang, so sollte man den letzten Parameter auf TRUE setzen. Natürlich sollte man dann auch trim() benutzen – aber soo offensichtlich ist das Problem nicht, und der DocBlock weist auch nicht darauf hin.

  5. Dominik am 14.09.2012 · 10:47

    @Thomas Scholz: Das stimmt. Meiner Meinung nach ist trim() dann aber der falsche Weg. Dann lieber ein neues Passwort generieren lassen, da es ja sonst nicht mehr mit der definierten Länge übereinstimmt und beim Benutzer für Verwirrung sorgen könnte: "Hey, es sollte 6 Zeichen lang sein, ist aber nun nur 5 (oder noch kürzer im Worst Case)."

  6. Thomas Scholz am 14.09.2012 · 10:59

    @Dominik: Ich sehe nicht, wo das passieren könnte. Die Warnung zur Länge kommt nur bei manueller Passworterzeugung, und in der DB wird kein Passwort gespeichert, die Länge ist also unbekannt.

    Die beste Reparatur wäre es, auf das Leerzeichen im Core zu verzichten. Einfach, besteht alle Tests, schadet der Sicherheit nicht – elegant.