Domanda

Esiste un modo programmatico per costruire htpasswd file, senza dipendere dalle funzioni specifiche del sistema operativo (ad es. exec(), passthru())?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top