Proteger uma pasta com o .htaccess (Basic HTTP Authentication)

Por sandro_admin em

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.

  1. Abrir o Notepad++ e guardar o ficheiro com o nome .htpasswd na pasta a proteger;
  2. Entrar na página Htpasswd Generator – Create htpasswd e introduzir o username e a password pretendidos;
  3. 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:

  1. Abrir o Notepad++ e guardar o ficheiro com o nome .htaccess na pasta a proteger;
  2. 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:

Basic HTTP Authentication

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.


0 comentários

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *