Como utiliza-lo arquivo .htpasswd
Encher un formulario de contrasinal nunha web pode ser crucial á hora de compartir contido con usuarios autorizados.
Con este arquivo podemos validar credenciais almacenadas e desta maneira poder acceder a unha sesión persoal.
Que é .htpasswd?
É un arquivo que axuda a protexer contidos como arquivos, carpetas ou unha web enteira usando a autenticación HTTP. As regras dun arquivo .htaccess poden facer funcionar ó .htpasswd. Os datos deste arquivo son arquivados en texto plano e as contrasinais son almacenadas nun formato encriptado. Esta encriptación é, polo xeral, MD5, polo tanto en Linux pode estar baseada na función crypt(). Aínda que é posible nomea-lo arquivo do contrasinal como queiramos, non se recomenda xa que Apache está preconfigurado para utilizar .httpasswd de maneira predeterminada.
Como crealo?
Este arquivo debe ser formatado en texto plano, o seu nome debe ser .htpasswd
e, malia que o podemos localizar en calquera parte do noso sitio, é
preferible utiliza-la carpeta destinada para isto no noso servidor,
xeralmente situada por enriba da carpeta que almacena a web. Esta
carpeta pode chamarse .htpasswds e seguramente estea no mesmo nivel de directorio que public_ftp.
Utilizando .htpasswd
O seu uso é completamente sinxelo, para comezar, podemos crear uns usuarios aleatorios neste arquivo, para poder proba-las funcións que o chaman e manipulan.
usuario1:contrasinal1
usuario2:contrasinal2
Recupera-los datos
Pódense recuperar estes datos dunha maneira ben sinxela e engadilos a un array para a súa fácil lectura.
function showUser() {
$file = file('members/password/.htpasswd');
$array = array();
$count = count($file);
for ($i = 0; $i < $count; $i++) {
list($username, $password) = explode(':', $file[$i]);
$array[] = array("username" => $username, "password" => $password);
}
return $array;
}
Eliminar un usuario
function delUser($username) {
$fileName = file('members/password/.htpasswd');
$pattern = "/". $username."/";
foreach ($fileName as $key => $value) {
if(preg_match($pattern, $value)) { $line = $key; }
}
unset($fileName[$line]);
if (!$fp = fopen('members/password/.htpasswd', 'w+')) {
print "Cannot open file ($fileName)";
exit;
}
if($fp) {
foreach($fileName as $line) { fwrite($fp,$line); }
fclose($fp);
}
}
Crear un usuario
Desta vez utilizaremos a función crypt para encripta-lo noso contrasinal, isto axudará un pouco máis na protección das credenciais. Para poder facer unha comparación cos datos engadidos nun formulario de acceso, é aconsellable utilizar estes métodos, para así nunca utiliza-los datos reais dos usuarios.
function regUser() {
$filename = 'members/password/.htpasswd';
$data = $_POST['username'] . ":" . htpasswd($_POST['password']) . "\n";
if (is_writable($filename)) {
if (!$handle = fopen($filename, 'a')) {
echo "Cannot open file ($filename)";
exit;
}
if (fwrite($handle, $data) === FALSE) {
echo "Cannot write to file ($filename)";
exit;
}
fclose($handle);
} else {
echo "The file $filename is not writable";
}
}
function htpasswd($pass) {
$pass = crypt(trim($pass),base64_encode(CRYPT_STD_DES));
return $pass;
}