domingo, 3 de fevereiro de 2013

Proteger o acesso a uma página web do Apache com .htaccess

O ficheiro .htaccess permite modificar o comportamento do servidor web Apache de várias formas. Uma dessas formas é a definição de uma password que tem de ser digitada para poder aceder à página.
Este método envolve a criação de dois ficheiros: .htpasswd (que vai conter a password) e .htaccess (que contém as instruções para o Apache pedir a password). É necessário também ter acesso à linha de comandos do servidor (acesso físico ou por SSH).

.htpasswd

Criamos o ficheiro .htpasswd com o seguinte conteúdo:
myuser:X4r!23dF
Em que "myuser" é o nome de utilizador e o "X4r!23dF" é a password. O ":" é o separador entre o username e a password.
O .htpassword, por uma questão de segurança, deve ser criado numa pasta não acessível a partir da web.
O ficheiro .htpasswd tem de ser encriptado para poder ser utilizado. A encriptação é feita usando o utilitário htpasswd. Portanto executamos:
htpasswd -c .htpasswd myuser
O parâmetro -c indica que queremos criar um novo ficheiro encriptado. O "myuser" é o username que queremos usar. É nos pedida a password (duas vezes).
Se tentarmos ver o conteúdo do .htpasswd com:
cat .htpasswd
Verificamos que o nome de utilizador continua visível, mas a password está encriptada.

.htaccess

Vamos agora criar o ficheiro .htaccess. Ao contrário do .htpasswd, este deve ser criado na pasta web que pretendemos proteger.
O .htaccess deve ficar com este conteúdo:

AuthUserFile /caminho/completo/.htpasswdAuthType BasicAuthName "Documento protegido"Require valid-user

Erro comum

Se as diretivas no ficheiro .htacces aparentam não estar a funcionar, a causa mais provável é a existência da diretiva
AllowOverride none
na configuração da pasta no Apache. Com esta opção o ficheiro .htaccess é completamente ignorado pelo Apache. Apenas é necessário editar a linha para
AllowOverride all
para permitir todas as diretivas no .htaccess, ou então
AllowOverride AuthConfig
para autorizar apenas as oções relativas à autrnticação.
Depois de alterar a configuração do Apache é necessário reiniciá-lo com
/etc/init.d/apache2 restart
ou com um comando equivalente.

Referências


http://www.elated.com/articles/password-protecting-your-pages-with-htaccess/
http://httpd.apache.org/docs/2.0/mod/core.html#allowoverride