Immer wieder hatte ich das leidige Problem: Auf die schnelle benötigen 10 oder mehr neue User Passwörter für den Zugang zu .htpasswd-geschützten Bereichen eines Webauftritts.
Also mal wieder ein paar tolle Passwörter ausdenken, mit php verschlüsseln und in die .htpasswd kopieren.
Diverse Online Verschlüsselungs-Module wollte ich aus Sicherheitsgründen nicht verwenden. Wer weiss schon, in welchen Rainbow-Tables die Passwörter samt Hashwerten landen.
Also entschloss ich mich dazu, auf die Schnelle einen eigenen online-Passwort-Generator zu programmieren, der mir die Arbeit abnimmt und ich also sicher sein kann, dass die Passwörter nicht in den Listen der Hacker landen.
Hier möchte ich kurz erklären, wie man mit wenig Aufwand einen solchen Passwort-Generator entwickelt. Für ganz eilige kann er hier verwendet werden: Passwort-Generator
Für alle anderen Interessierten gibt es hier die Anleitung zum nachprogrammieren (ein klein wenig PHP-Erfahrung vorausgesetzt):
1. zufälliges Passwort generieren
Als erstes brauchen wir eine Funktion, die sich ein geeignetes Passwort "ausdenkt". Nichts einfacher als das. Aus einem Pool an Zeichen (Zum verwechseln ähnliche Zeichen wie I,l usw. werden hier weggelassen),
Mit srand initialieren wir den Zufallsgenerator, rand() übergibt uns dann einen zufälligen Wert innerhalb der String-Länge des $pool. Wir nehmen also das zufällige Zeichen an dieser Stelle und fügen es zum Passwort hinzu. Wir iterieren darüber so oft, wie das Passwort lang sein soll. (In diesem Fall 6 mal). Die Funktion gibt dann das zusammengebaute Passwort zurück.
function generate_password($length)
{
if ($length == 0) $length = 6;
$pool = "qwertzupasdfghkyxcvbnm";
$pool .= "23456789";
$pool .= "WERTZUPLKJHGFDSAYXCVBNM";
$pool .= "!§$%&/()=";
srand ((double)microtime()*1000000);
for($index = 0; $index < $length; $index++)
{
$pass_word .= substr($pool,(rand()%(strlen ($pool))), 1);
}
return $pass_word;
}
2. Wir bauen ausserdem die HTML Form zur Eingabe der Benutzernamen, für die Passwörter generiert werden sollen. Die Action der Form wird auf die Datei selbst fest gelegt. Wer mag, kann auch noch die Eingabe der Passwort-Länge hier einbauen, z.B. mit einem Feld names "length".
<form name="form1" method="post" action="htpasswd-generator.php">
<table style="margin:auto" border="0" cellspacing="0" cellpadding="0">
<tr>
<td><b>Bitte geben Sie einen Benutzernamen pro Zeile an:<br>
</b></td>
<td></td>
</tr>
<tr>
<td>
<textarea name="users" rows="8" cols="60"></textarea>
</td>
<td>
<br />
</td>
</tr>
</table>
<p>
<input type="submit" name="anfordern" value="Passwörter anfordern">
</p>
<p><br />Hinweis: Wir speichern keine der eingegebenen Daten<br /></p>
</form>
Diese Form kopieren wir erstmal in eine andere Datei und verwenden sie später im Code, siehe Punkt 5.
3. Jetzt können wir im PHP die übergebenen Variablen abfragen, und die Passwörter anzeigen lassen. Im Array $u speichern wir die Postvariable users, getrennt durch Zeilenvorschübe (\n) mit der Funktion explode.
Sollten Sie eine Länge unter 2. übergeben, können Sie sie hier zusätzlich der Funktion übergeben, der Einfachkeit halber verzichte ich hier darauf.
if ($_POST['users'])
{
$u = explode("\n", $_POST['users']);
for ($i = 0; $i < count($u); $i++)
{
if ($u[$i])
{
$p[$i]= generate_password();
echo "Benutzer: ";
echo trim($u[$i]).", Password: ";
echo $p[$i]. "<br />";
}
}
4. Jetzt brauchen wir diese Passwörter nur noch für die .htpasswd Datei zu verschlüsseln und sie .htpasswd-gerecht zu formatieren (user:hashwert). Wir iterieren also wieder über das Array $u und benutzen für jedes Passwort die PHP-Funktion crypt, die den für .htpasswd passenden Hash-Wert zurückgibt :
for ($i = 0; $i < count($u); $i++)
{
if ($u[$i])
{
// Encrypt password
$password = crypt($p[$i], base64_encode($p[$i]));
echo trim($u[$i]).":";
// Print encrypted password
echo $password ."<br />";
}
}
5. In den nun folgenden else Block, der sich auf if ($u) bezieht, muss unsere Eingabemaske von 1. rein, denn nur wenn noch keine User übergeben wurden, sollen diese natürlich abgefragt werden.
else {
?>
<form name="form1" method="post" action="htpasswd-generator.php">
<table style="margin:auto" border="0" cellspacing="0" cellpadding="0">
<tr>
<td><b>Bitte geben Sie einen Benutzernamen pro Zeile an:<br>
</b></td>
<td></td>
</tr>
<tr>
<td>
<textarea name="users" rows="8" cols="60"></textarea>
</td>
<td>
<br />
</td>
</tr>
</table>
<p>
<input type="submit" name="anfordern" value="Passwörter anfordern">
</p>
<p><br />Hinweis: Wir speichern keine der eingegebenen Daten<br /></p>
</form>
<?
}
Das war's, hier können Sie den Passwort-Generator verwenden, und unten finden Sie den ganzen Quellcode zum Download. Bitte beachten Sie, dass der Schutz mit .htpasswd keine hundertprozentige Sicherheit darstellt und Passwörter mit dem gezeigten Beispiel im Klartext übertragen werden, was ebenfalls ein Sicherheitsrisko darstellt. Für Anforderungen mit hoher Sicherheitsstufe sollte man sich natürlich zusätzliche Strategien dafür überlegen. Hier geht es lediglich um die Demonstration der Grundfunktionen.

Neuen Kommentar schreiben