Gibt es einen programmatischen Weg htpasswd Dateien zu erstellen, ohne abhängig von OS spezifischen Funktionen (d. H. exec()
, passthru()
)?Programmgesteuertes Erstellen von htpasswd
Antwort
.httpasswd-Dateien sind nur Textdateien mit einem bestimmten Format, das von der angegebenen Hash-Funktion abhängt. Wenn Sie MD5 verwenden sie sehen wie folgt aus:
foo:$apr1$y1cXxW5l$3vapv2yyCXaYz8zGoXj241
, dass das Login ist, einen Doppelpunkt, $ APR1 $, das Salz und das 1000-fache md5 als Base64 codiert. Wenn Sie SHA1 wählen sie sehen wie folgt aus:
foo:{SHA}BW6v589SIg3i3zaEW47RcMZ+I+M=
, dass der Anmelde ist, ein Doppelpunkt, die Zeichenfolge {SHA} und die SHA1-Hash mit Base64 codiert.
Wenn Ihre Sprache eine Implementierung entweder MD5 oder SHA1 und base64 hat, können Sie einfach die Datei wie folgt erstellen:
<?php
$login = 'foo';
$pass = 'pass';
$hash = base64_encode(sha1($pass, true));
$contents = $login . ':{SHA}' . $hash;
file_put_contents('.htpasswd', $contents);
?>
Hier mehr Informationen über das Format:
http://httpd.apache.org/docs/2.2/misc/password_encryptions.html
Trac wird mit einem Python-Ersatz für htpasswd geliefert, von dem ich sicher bin, dass Sie ihn in die Sprache Ihrer Wahl portieren können: htpasswd.py.
Zuerst dieses Formular erstellen:
<FORM METHOD="POST" ACTION="<? echo $_SERVER['PHP_SELF']; ?>" onSubmit='return ValidateForm()'>
Username<br /><INPUT TYPE="TEXT" NAME="user[]"><br /><br />
Password<br /><INPUT TYPE="PASSWORD" NAME="password1[]"><br />
<INPUT TYPE="PASSWORD" NAME="password2[]"><br /><br />
<INPUT type=submit name="submit" VALUE="Create .htpasswd entry" onclick="document.all.submit.style.visibility='hidden'">
</FORM>
Dann wird diese PHP-Code wird das Passwort für Sie erstellen:
if (isset($_POST['user']) && isset($_POST['password1'])) {
if($_POST['password1'] == $_POST['password2']) {
$user = $_POST['user'];
$password1 = $_POST['password1'];
$htpasswd_text = "";
for ($i = 0; $i < count ($user); $i++) {
$htpasswd_text .= "$user[$i]:".crypt($password1[$i],CRYPT_STD_DES)."";
}
echo "<br />Copy this line to your .htpasswd file:";
echo "<pre style=\"border-bottom-width:1px;border-bottom-style:solid;\">";
echo nl2br($htpasswd_text);
echo "</pre><br />";
} else {
echo "<pre style=\"border-bottom-width:1px;border-bottom-style:solid;\">Passwords do not match !</pre><br />";
}
}
Der eigentliche Text anhängen Sie Datei htpasswd in der $htpasswd_text
ist Variable.
Crypt-Format Hashing ist veraltet und sollte nicht mehr verwendet werden. Der aktuelle Standardwert für htpasswd ist md5. – bitmusher
Aus Was es auf der PHP-Website sagt, 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 kann gefunden werden: http://ca3.php.net/crypt
Dies überschreibt natürlich die gesamte vorhandene Datei, so dass Sie eine Art von Konkatation machen wollen.
Ich bin nicht 100% sicher, dass dies funktioniert, aber ich bin mir ziemlich sicher.
Crypt-Format Hash in htpasswd Dateien ist veraltet und sollte nicht verwendet werden . Der aktuelle Standard ist die md5-Variante. – bitmusher
Ich fand den Code, um das MD5-Format Passwort zu generieren http://techtalk.virendrachandak.com/using-php-create-passwords-for-htpasswd-file/ –