php automation .htpasswd

php - Construcción programática htpasswd



automation .htpasswd (4)

Trac se envía con un reemplazo de Python para htpasswd, y estoy seguro de que puede transferirlo al idioma de su elección: htpasswd.py .

¿Existe una forma programática para crear archivos htpasswd , sin depender de las funciones específicas del sistema operativo (es decir, exec() , passthru() )?


De lo que dice en el sitio web de PHP, puedes usar crypt () en el siguiente método:

<?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); ?>

Parte de este ejemplo se puede encontrar: http://ca3.php.net/crypt

Esto, por supuesto, sobrescribirá todo el archivo existente, por lo que querrás hacer algún tipo de concatinación.

No estoy 100% seguro de que esto funcionará, pero estoy bastante seguro.


Los archivos .httpasswd son solo archivos de texto con un formato específico que depende de la función hash especificada. Si está usando MD5 se ven así:

foo:$apr1$y1cXxW5l$3vapv2yyCXaYz8zGoXj241

Ese es el inicio de sesión, dos puntos, $ apr1 $, la sal y 1000 veces md5 codificado como base64. Si selecciona SHA1 se ven así:

foo:{SHA}BW6v589SIg3i3zaEW47RcMZ+I+M=

Ese es el inicio de sesión, dos puntos, la cadena {SHA} y el hash SHA1 codificado con base64.

Si su idioma tiene una implementación de MD5 o SHA1 y base64, puede crear el archivo de esta manera:

<?php $login = ''foo''; $pass = ''pass''; $hash = base64_encode(sha1($pass, true)); $contents = $login . '':{SHA}'' . $hash; file_put_contents(''.htpasswd'', $contents); ?>

Aquí hay más información sobre el formato:

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


Primero, crea esta forma:

<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>

Entonces, este código PHP creará la contraseña para usted:

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 />"; } }

El texto real para anexar a su archivo htpasswd está en la variable $htpasswd_text .