Protegendo suas páginas com .htaccess do Apache | Código Fonte
Thiago Estrela 10 de junho de 2009
O ".htaccess" é um arquivo de configuração distribuído (já que pode ser usado em vários diretórios), sendo seu uso relacionado a webservers em geral, principalmente o Apache.
Um arquivo, contendo uma ou mais diretivas de configuração, quando colocado dentro de um diretório, aplica essas diretivas a ele e a todos sub-diretórios, tendo essa nova configuração prioridade sobre a estabelecida para este diretório no httpd.conf.
AuthType Basic AuthName "TITULO DA JANELA" AuthUserFile "/home/usuario/.htpasswds/public_html/admin/passwd" require valid-user
Na configuração acima, é estabelecido um tipo de autenticação no qual aparece uma janela solicitando usuário e senha para acessar determinada área (para trancar ou proteger a pasta "admin", basta colocar o arquivo .htaccess com as configurações acima na respectiva pasta).
Na linha 2, pode-se colocar um nome ou título para a janela que irá aparecer para o usuário.
Na linha 3, está o endereço do arquivo que contém os usuários e senhas dos quais têm acesso permitido à área. Esse arquivo (passwd) não pode ser acessado externamente (quando configurado corretamente) e o seu conteúdo é "usuario:6YNFCJWSDGpA2" . Repare que a senha (que vem depois dos 'dois pontos' e é "usuario") está encriptada para maior segurança.
<Files pagina_erro_403.php> Order Deny,Allow Deny from all Allow from 192.168. </Files>
O código acima faz com que apenas os IPs da rede local, ou seja, os IPs do tipo "192.168.x.x ", onde "x" representa um número de 0 a 255, seja permitido.
Dessa forma, todos os outros IPs serão negados e nenhum IP fora da rede será aceito onde possuir o arquivo .htaccess. Na primeira linha, é definida uma página que será exibida àqueles que não possuem permissão para acessar a área (nesse caso a página de erro 403, ou acesso negado, será exibida).
As páginas de erros que são exibidas, como quando não se acha um arquivo ou página no servidor e exibe uma página de "Não Encontrado", podem ser personalizadas através do .htaccess.
Essas páginas são importantes e deve-se dar uma atenção especial a elas, já que uma tentativa de ataque ou uma intenção maliciosa podem ser descobertas através de uma monitoração constante de logs ou avisos, gerados com o auxílio de linguagens dinâmicas (PHP, Python, etc). O código abaixo mostra como se pode personalizar ou alterar essas páginas de acordo com suas necessidades ou interesses.
ErrorDocument 403 /acesso_negado.php ErrorDocument 404 /nao_encontrado.php ErrorDocument 500 /erro_interno_servidor.php
No código acima, foram personalizados os erros mais comuns (note que aos erros são associados números), e existem vários erros, como os erros de número 400, 401, 402 que são associados aos "erros de cliente", e os erros acima de 500 que são associados aos "erros de servidor".
Na primeira linha, é definida uma página para quando o usuário não tem permissão de acesso.
Na segunda, quando um usuário tenta acessar um arquivo ou diretório inexistente no servidor, será exibida a página "não_encontrado.php".
E, por último, será exibido a página "erro_interno_servidor.php" quando acontecer um erro interno no servidor.
Com esse recurso, você pode criar uma página PHP (por exemplo) que envia um e-mail e/ou armazena em algum banco de dados as informações do usuário que acessou tal página e, caso perceba algo suspeito, tomará providências de modo a corrigir uma suposta falha ou problema de segurança.
O mod_rewrite é um módulo do Apache que permite reescrever regras para tornar as URL's Amigáveis. Assim, pode-se atrair mais visitantes ao seu site (os endereços do seu site irão se tornar mais relevantes nos motores de busca) e ainda tornar seus sites mais seguros. Abaixo, iremos mostrar como:
RewriteEngine On RewriteCond %{SCRIPT_FILENAME} !-f RewriteCond %{SCRIPT_FILENAME} !-d RewriteRule ^(.*)$ index.php?pagina=$1
A primeira linha é a responsável por ativar a regra que altera as URL's (endereços dos sites).
A segunda e a terceira fazem com que essa regra não seja aplicada a outros arquivos e diretórios respectivamente.
Na última linha, é exibida a regra de reescrita onde qualquer string (.*) após a pasta, onde estiver o .htaccess, será interpretado por "index.php" passado na variável "pagina"; ou melhor, quando se digitar um endereço do tipo "www.seusite.com.br/secao/subsecao/", o Apache entenderá que você digitou "www.seusite.com.br/index.php?pagina=secao/subsecao/".
Dessa maneira, você cria os links de seu site para o primeiro endereço citado, escondendo dessa forma a linguagem da página e as variáveis de include, evitando que usuários mal intencionados possam injetar códigos maliciosos (usando, por exemplo, o XSS).
ApacheLinuxSegurançaServidor
Graduando em Ciência da Computação pela Universidade Federal de Lavras (UFLA), desenvolve sistemas online e aplicações web há mais de 5 anos. Entre as principais linguagens de atuação, destacam-se PHP e Adobe Flash/Flex.