Creazione programmatica di htpasswd
-
09-06-2019 - |
Domanda
Esiste un modo programmatico per costruire htpasswd file, senza dipendere dalle funzioni specifiche del sistema operativo (ad es. exec()
, passthru()
)?
Soluzione
I file .httpasswd sono solo file di testo con un formato specifico a seconda della funzione hash specificata.Se stai usando MD5 assomigliano a questo:
foo:$apr1$y1cXxW5l$3vapv2yyCXaYz8zGoXj241
Questo è il login, i due punti, $apr1$, il sale e 1000 volte md5 codificato come base64.Se selezioni SHA1 appariranno così:
foo:{SHA}BW6v589SIg3i3zaEW47RcMZ+I+M=
Questo è il login, i due punti, la stringa {SHA} e l'hash SHA1 codificato con base64.
Se la tua lingua ha un'implementazione di MD5 o SHA1 e base64 puoi semplicemente creare il file in questo modo:
<?php
$login = 'foo';
$pass = 'pass';
$hash = base64_encode(sha1($pass, true));
$contents = $login . ':{SHA}' . $hash;
file_put_contents('.htpasswd', $contents);
?>
Ecco ulteriori informazioni sul formato:
http://httpd.apache.org/docs/2.2/misc/password_encryptions.html
Altri suggerimenti
Trac viene fornito con un sostituto Python per htpasswd, che sono sicuro che potresti portare nel tuo linguaggio preferito: htpasswd.py.
Da quello che dice sul sito web di PHP, puoi usare crypt() nel seguente metodo:
<?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 di questo esempio può essere trovata: http://ca3.php.net/crypt
Questo ovviamente sovrascriverà l'intero file esistente, quindi ti consigliamo di eseguire una sorta di concatenazione.
Non sono sicuro al 100% che funzionerà, ma sono abbastanza sicuro.