Frage

Gibt es eine programmatische Möglichkeit zum Erstellen? htpasswd Dateien, ohne von betriebssystemspezifischen Funktionen abhängig zu sein (d. h. exec(), passthru())?

War es hilfreich?

Lösung

.htpasswd-Dateien sind lediglich Textdateien mit einem bestimmten Format, abhängig von der angegebenen Hash-Funktion.Wenn Sie MD5 verwenden, sehen sie so aus:

foo:$apr1$y1cXxW5l$3vapv2yyCXaYz8zGoXj241

Das sind das Login, ein Doppelpunkt, ,$apr1$, das Salt und 1000 Mal MD5, kodiert als Base64.Wenn Sie SHA1 auswählen, sehen sie so aus:

foo:{SHA}BW6v589SIg3i3zaEW47RcMZ+I+M=

Das sind das Login, ein Doppelpunkt, die Zeichenfolge {SHA} und der mit base64 codierte SHA1-Hash.

Wenn Ihre Sprache über eine Implementierung von MD5 oder SHA1 und Base64 verfügt, können Sie die Datei einfach wie folgt erstellen:

<?php

$login = 'foo';
$pass = 'pass';
$hash = base64_encode(sha1($pass, true));

$contents = $login . ':{SHA}' . $hash;

file_put_contents('.htpasswd', $contents);

?>

Hier finden Sie weitere Informationen zum Format:

http://httpd.apache.org/docs/2.2/misc/password_encryptions.html

Andere Tipps

Spur wird mit einem Python-Ersatz für htpasswd geliefert, den Sie sicher in die Sprache Ihrer Wahl portieren können: htpasswd.py.

Den Angaben auf der PHP-Website zufolge können Sie crypt() in der folgenden Methode verwenden:

<?php

// Set the password & username
$username = 'user';
$password = 'mypassword';

// Get the hash, letting the salt be automatically generated
$hash = crypt($password);

// write to a file
file_set_contents('.htpasswd', $username ':' . $contents);

?>

Ein Teil dieses Beispiels ist zu finden: http://ca3.php.net/crypt

Dadurch wird natürlich die gesamte vorhandene Datei überschrieben, Sie sollten also eine Art Verkettung durchführen.

Ich bin mir nicht hundertprozentig sicher, dass das funktionieren wird, aber ich bin mir ziemlich sicher.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top