Como proteger pastas do seu site com autenticação HTTP

A autenticação HTTP é um tipo de autenticação básica disponível na maioria dos servidores web. Através dela, você pode liberar o acesso aos arquivos de uma determinada pasta de seu site apenas para pessoas cadastradas com um nome de usuário e senha válidos.

Cabe lembrar que linguagens de servidor, como PHP, oferecem um método mais eficiente de proteger o acesso de áreas do seu site através de cookies e variáveis de sessão, mas você pode, assim mesmo, utilizar a técnica que será apresentada aqui. Ela funciona, inclusive, em provedores que oferecem apenas hospedagem básica em HTML, sem acesso a qualquer tecnologia server-side.

Neste exemplo, vamos demonstrar como criar a autenticação usando o servidor Web Apache.

Passo 1: Modificando o arquivo .htaccess

Os arquivos .htaccess ficaram bastante conhecidos recentemente por causa das chamadas URLs amigáveis e todo essa história de Web 2.0, mas eles servem para bem mais do que deixar suas URLs bonitinhas.

A primeira coisa que você tem que fazer é criar a pasta que você quer proteger. Dentro dessa pasta, coloque (por exemplo: envie por FTP) um arquivo .htaccess com este conteúdo:

AuthType Basic
AuthName "Documentos secretos"
AuthUserFile /home/andre/public_html/teste/.htpasswd
Require valid-user

Aqui as linhas que devem ser modificadas são a segunda e a terceira. Na segunda linha, você vai colocar, entre aspas, o texto que vai aparecer na janela que vai pedir a senha, neste exemplo: Documentos secretos.

Na terceira linha, você vai informar o caminho completo de um arquivo chamado .htpasswd , que é o arquivo que vai armazenar os nomes de usuário e senhas válidos. Se você não sabe qual é o caminho completo, pergunte ao seu provedor de hospedagem ou veja no seu CPanel ou outro sistema de administração, se disponível; O importante é que o arquivo .htpasswd esteja no local indicado pela linha do .htaccess. Neste caso, ele está dentro da pasta teste/, que é a própria pasta a ser protegida.

Passo 2: o arquivo .htpasswd

Esse arquivo guarda os usuários e senhas que têm permissão de acessar a pasta.

Pra criá-lo, você deve utilizar o comando htpasswd como root.

Se você tem acesso ssh ao seu servidor, pode executá-lo diretamente lá; Se não tem, pode criá-lo na sua máquina e, então, enviá-lo via FTP para o local adequado.

Na primeira vez que for usar o programa, digite isso:

# htpasswd -c .htpasswd andre

Esse comando cria (-c) um novo arquivo de senhas chamado .htpasswd (ele pode ter o nome qu você quiser, apenas preste atenção ao que está escrito no .htaccess) e já adiciona nesse arquivo um usuário chamado andre. Ao pressionar enter, ele vai pedir para que você digite a senha do novo usuário duas vezes.

A opção -c cria um novo arquivo, assim, deve ser usada só uma vez. Para adicionar mais usuários, use o comando com a sintaxe a seguir:

# htpasswd .htpassword joao

Onde .htpasswd é o arquivo no qual vc deseja adicionar o usuário e joao é o nome do usuário.

Configurando UserDir no Apache2

Você já deve ter visto por aí aquelas páginas cuja URL é algo parecido com http://www.algumacoisa.com/~usuario/algumapagina.html. Esse tipo de URL está presente principalmente em sites de grandes universidades americanas, onde o servidor de hospedagem está na própria instituição, ou em alguns provedores de hospedagem gratuita. Mas você já parou para pensar o que isso significa?

Uma das características do servidor web Apache é ser extremamente flexível e, no caso acima, estamos usando a extensão UserDir.

UserDir permite que todos os usuários possam ter a sua página pessoal no servidor. No exemplo acima, há um usuário chamado “usuario”, que está na máquina http://www.algumacoisa.com e ele colocou sua página pessoal em uma pasta “especial” em seu diretório /home. Ao digitarmos ~nomedousuário, o Apache irá redirecionar o navegador para essa pasta no /home do usuário correspondente ao que vier depois do til. É a maneira mais fácil de se fazer um provedor de hospedagem, testar seus sites sem se preocupar com permissões ou de dar uma página pessoal para cada membro de uma empresa, escola ou instituição, e é bem simples de fazer!

Primeiramente, instale o Apache, PHP, MySQL e tudo mais que achar necessário. Não vou entrar nesses detalhes, OK? Uma vez que tudo esteja instalado, configurado e funcionando como deveria, abra um terminal, Konsole, XTerm ou o seu emulador preferido e digite como root:

# ln -sf /etc/apache2/mods-available/userdir.conf /etc/apache2/mods-enabled
# ln -sf /etc/apache2/mods-available/userdir.load /etc/apache2/mods-enabled
# /etc/init.d/apache2 restart

O que você fez foi criar um link simbólico para dois arquivos da pasta mods-available, que armazena os módulos que podem ser instalados no Apache, para a pasta mods-enabled, que tem os módulos que estão ativos no servidor web. Depois, você reiniciou o Apache.

Para testar, crie, em sua pasta /home, uma pasta chamada public_html . Agora, abra seu navegador favorito e digite http://localhost/~nomedoseuusuario, como por exemplo http://localhost/~andre.Você deverá ver uma página com o título “Index of /~nomedousuario”. Agora, coloque ali uma página chamada index.html, atualize o navegador e voilá! Para cada usuário, você deverá criar uma pasta public_html. Se quiser mudar o nome dessa pasta u alterar outras opções, edite o arquivo /etc/apache2/mods-enabled/userdir.conf e reinicie o servidor. Quem disse que Linux é difícil?

Parte do conteúdo deste artigo foi extraído do site Dicas-L.