¿Hay una manera programática de crear archivos htpasswd, sin depender de las funciones específicas del sistema operativo (es decir, exec()
, passthru()
)?Generando programáticamente htpasswd
Respuesta
.httpasswd archivos son solo archivos de texto con un formato específico dependiendo de la función hash especificada. Si está utilizando MD5 se ven así:
foo:$apr1$y1cXxW5l$3vapv2yyCXaYz8zGoXj241
Esa es la entrada, dos puntos, APR1 $ $, la sal y 1000 veces MD5 codificado como base 64. Si selecciona SHA1 se ven así:
foo:{SHA}BW6v589SIg3i3zaEW47RcMZ+I+M=
Esa es la entrada, dos puntos, la cadena {} SHA y el hash SHA1 codificado con base64.
Si el lenguaje tiene una implementación de cualquiera de MD5 o SHA1 y base 64 sólo se puede crear el archivo de la siguiente 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
Trac se envía con un reemplazo de Python para htpasswd, que estoy seguro que puede transferir a su idioma de elección: htpasswd.py.
primer lugar, crear este formulario:
<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 que htpasswd archivo está en el $htpasswd_text
variable.
hash de formato de cripta es obsoleto y ya no se debe utilizar. El valor predeterminado actual para htpasswd es md5. – bitmusher
De lo que dice en el sitio web de PHP, puede 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á hacer algún tipo de concatinación.
No estoy 100% seguro de que esto funcionará, pero estoy bastante seguro.
El hash de formato de criptografía en archivos htpasswd es obsoleto y no debe usarse . El valor predeterminado actual es la variante md5. – bitmusher
- 1. Generando gradientes programáticamente?
- 2. Excluir carpeta de htpasswd
- 3. Uso correcto de .htpasswd
- 4. Generando HTML programáticamente en C#, Targeting Printed Reports
- 5. .htpasswd en el subdominio específico
- 6. Apache htpasswd cambio de contraseña segura
- 7. .htaccess o .htpasswd equivalente en IIS?
- 8. generando licenses.licx
- 9. Generando singletons
- 10. Generando URI en Jena para RDF
- 11. HTTP: Generando encabezado ETag
- 12. Generando imágenes moderadamente interesantes
- 13. Generando documentación de Javascript
- 14. Generando PDF desde OpenXml
- 15. Generando límite multiparte
- 16. Generando pruebas unitarias automáticamente
- 17. Generando tuplas de tuplas
- 18. usando UIScrollView generando problemas
- 19. generando documentos docx dinámicos
- 20. Generando permutaciones usando bash
- 21. generando diagrama de clase
- 22. Generando código F #
- 23. Generando mapas dinámicamente
- 24. Generando una cadena aleatoria
- 25. Generando vectores en MATLAB
- 26. Generando una ruta canónica
- 27. Generando .dll usando CMake
- 28. cómo generar un hash como htpasswd de Apache usando java
- 29. ¿Puedo copiar/pegar archivos htpasswd en mi nuevo servidor?
- 30. ¿Cómo desconectarse cuando se utiliza la autenticación .htaccess (y .htpasswd)?
Encontré el código para generar la contraseña de formato MD5 también http://techtalk.virendrachandak.com/using-php-create-passwords-for-htpasswd-file/ –