Esse tutorial tem por objetivo introduzir o conceito de segurança com o uso de arquivos
.htaccess do servidor
Apache. Pretende-se mostrar, de forma prática, o uso do .htaccess para a proteção ou segurança de sites em algumas situações que podem ser frequentes.
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.
Lembrando que você pode também mudar o nome do .htaccess para .config, por exemplo, através da diretiva
AccessFileName do Apache (necessário permissão para isso).
Entre as várias utilidades desse arquivo de configuração (.htaccess), vamos destacar algumas abaixo, com relação a segurança de páginas ou sites na internet:
Autenticação
Digamos que você tenha criado um Administrador para seu site e este esteja no endereço www.seudominio.com.br/admin e, além disso, precise proteger seu Administrador de modo fácil, seguro e rápido. Isso poderia ser feito da seguinte maneira:
AuthType Basic
AuthName "TÍTULO 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 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.
Intranet
Outra utilidade bastante interessante do .htaccess é quando se tem uma Intranet rodando em um servidor web (que não seja interno a rede da empresa) e precisa-se permitir o acesso de determinados IPs (ou faixas de IPs) a essa Intranet. Pode-se então usar o seguinte código em um arquivo .htaccess e colocá-lo no diretório onde está sua Intranet:
<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, sejam permitidos. 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).
Páginas de erros
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.
mod_rewrite
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 mostraremos 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).
As utilidades do arquivo .htaccess são inúmeras e nesse tutorial foi priorizado o uso para tornar as páginas ou sites mais seguros. Obviamente, para tornar uma página segura, deve-se priorizar uma programação bem feita das páginas e uma configuração correta dos serviços e/ou protocolos do servidor, mas o uso do .htaccess pode servir como uma ferramenta de ajuda e as vezes mais do que isso.
É importante ressaltar que o uso de .htaccess não deve sobrepor ao uso correto (configurações corretas) do arquivo principal httpd.conf do Apache pelas razões aqui citadas de segurança , por razões de segurança e desempenho principalmente.