O Apache permite criar ficheiros de configuração de forma a especificar pastas ou ficheiros que apenas podem ser acedidos após autenticação através de um nome de utilizador e palavra-passe. Este método é extremamente simples de implementar não sendo necessário utilizar base de dados (embora seja possível) nem nenhuma linguagem de programação. Eu utilizo este método, por exemplo, para proteger temporariamente o acesso a um website que esteja em fase de desenvolvimento. Também é útil para proteger a pasta wp-admin
do WordPress.
1. Criar o ficheiro .htpasswd
O ficheiro .htpasswd
pode conter uma lista com vários usernames (em plain text) e as respetivas palavras-passe (hashed) separados com o carácter :
. Aqui está um exemplo com 2 utilizadores (sandro
e user_x
)
sandro:$apr1$asB2d4J8$tjtfVoJFlemiqqFT8efKE0 user_x:$apr1$3O4O8UdF$PnM6Vfh871yQDS.Uls7f0t
Embora este ficheiro possa ser armazenado em qualquer pasta do servidor, para haver uma melhor organização vamos guardá-lo na pasta que queremos proteger.
NOTA #1: é possível criar este ficheiro com um utilitário do Apache, no entanto, para facilitar vamos criá-lo manualmente.
NOTA #2: não é possível criar este ficheiro com o explorador do Windows. Sendo assim, vamos utilizar o Notepad++.
Passando à prática, vamos criar um utilizador.
- Abrir o Notepad++ e guardar o ficheiro com o nome
.htpasswd
na pasta a proteger; - Entrar na página Htpasswd Generator – Create htpasswd e introduzir o username e a password pretendidos;
- Copiar o resultado para o ficheiro
.htpasswd
e guardar as alterações.
NOTA #3: o algoritmo utilizado para criar a hash da palavra-passe difere consoante a plataforma. No entanto, este site gera a hash utilizando o MD5 que funciona em sites alojados em qualquer plataforma, incluindo Windows e Linux. Tal é possível porque o Apache cria uma hash da palavra-passe introduzida pelo utilizador com o mesmo algoritmo usado para gerar a palavra-passe armazenada no ficheiro .htpasswd
.
2. Criar o ficheiro .htaccess
Sempre que acedemos a uma página do servidor, o Apache verifica se existe o ficheiro .htaccess
dentro da pasta atual. Este ficheiro especial, a existir, pode conter uma série de configurações, entre as quais, ativar a proteção de pastas com palavra-passe.
Neste exemplo vamos proteger a pasta protected-folder
no domínio sandromiguel.com, portanto, quando alguém aceder a http://sandromiguel.com/protected-folder deve aparecer no ecrã uma janela para introduzir as credenciais de acesso(Nome do utilizador: sandro / Palavra-passe: miguel). Caso pretenda restringir o acesso a um site inteiro, basta colocar o ficheiro .htaccess
no diretório raiz do site.
Seguem os passos necessários para criar e configurar o ficheiro.htaccess
:
- Abrir o Notepad++ e guardar o ficheiro com o nome
.htaccess
na pasta a proteger; - Adicionar as seguintes diretivas:
AuthType Basic AuthName "Restricted Area" AuthUserFile /home/hosting/o-meu-site.pt/a-minha-pasta/.htpasswd require valid-user
NOTA #4: a diretiva AuthUserFile
necessita de ter um caminho válido até ao ficheiro .htpasswd
que pode ser obtida com o seguinte script em PHP:
<?php echo $_SERVER["DOCUMENT_ROOT"];
Feito isto, e colocados ambos os ficheiros no servidor, estamos prontos para ver a proteção a funcionar. Ao aceder ao endereço do seu site, deverá aparecer uma janela para autenticação similar à seguinte figura:
Segurança
A autenticação por HTTP, por si só, assim como muitos outros sistemas de autenticação, são suscetíveis aos ataques men-in-the-midle através da monitorização do tráfego entre o cliente e o servidor. Para resolver tal problema é necessário implementar o SSL (do inglês Secure Sockets Layer) que é um protocolo que encripta as comunicações na Internet, possibilitando a utilização de endereços web iniciados por https://, garantido que a informação transferida entre o servidor e o browser do utilizador (cliente) é sigilosa e segura.
Conclusão
O Apache oferece uma forma muito simples e eficaz de proteger pastas e ficheiros. Não é a forma mais elegante, mas serve perfeitamente para muitos propósitos.
Referências
Gehrke, A. (23 de agosto de 2017). htpasswd – The file to store passwords. Obtido de .htaccess Tools: http://www.htaccesstools.com/articles/htpasswd/
Gilmore, W. J. (2010). Beginning PHP and MySQL (4th ed.). New York: Apress.
Hogan, B. P., Warren, C., Weber, M., Johnson, C., & Godin, A. (2012). Web Development Recipes. Dallas: The Pragmatic Programmers, LLC.
Achou interessante? Siga-me no Twitter.