quarta-feira, 6 de maio de 2015

Nesse post estarei "dando uma luz" para quem usa o Apache como servidor web.

Ao instalar seus serviços web, o apache não cria o arquivo .htaccess em seu servidor, exceto se você está usando uma CMS (Sistema de Controle de Conteúdo, sigla em inglês) como por exemplo o WordPress ou o Joomla!.

Visualizando o arquivo no navegador


Para achar seu arquivo pelo navegador, digite na barra de endereços a URL:

http://seusite/.htacess

Substituindo "seusite" pelo link (URL) do seu site.

Dependendo das configurações do servidor, podem aparecer de muitas formas diferentes o seu conteúdo.

Acessando o .htaccess em servidores linux


Por padrão ele vem oculto dentro de /var/www/ do seu servidor, para ativá-lo entre no terminal e digite

sudo nano /etc/apache2/site-a-editar/default

Substitua "site-a-editar" pelo nome do diretório do seu site.

Se tudo correr bem, você deverá ver algo assim:

<Directory /var/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
 </Directory>

Salve o arquivo e depois reinicie o serviço web do seu apache digitando:

sudo service apache2 restart

Pronto, agora ele já está funcionando.

Editando o .htaccess em servidores linux


Você pode criá-lo por um editor de textos gráfico e salvá-lo como ".htaccess", tendo cuidado para que seja somente esse o nome do arquivo, sem extensões ou outras palavras e colocá-lo no servidor por meio de um upload.

Ou então no terminal digite

sudo nano /var/www/exemplo.com/.htaccess

Substitua "exemplo.com" para o nome do seu site no apache.

Alterando as permissões de autenticação


Usando o atributo "Authentication" podemos restringir o acesso a certas áreas do site. Usar o htaccess é mais efetivo que o apache2.conf pois este necessita de permissões especiais e muito mais conhecimento técnico.

Para que isso funcione bem, existe a necessidade de criar um arquivo chamado .htpasswd para que este seja o banco de usuários e senhas aceitas na autenticação. Para criá-lo recomendo que use um editor gráfico de texto.

A criação e edição do .htpasswd é muito fácil, após ter criado o arquivo, abra-o e coloque nele os usuários e suas respectivas senhas como exemplo:

joao:senhadeleaqui
maria:amo!minhamae
lucas:sacul2015

Não escreva mais nada nele e tenha cuidado para que cada usuário esteja em uma linha sozinho com sua senha e com entradas duplicadas (que podem causar "bugs" no sistema).

Caso necessite de criptografia para essas senhas, acesse este site aqui (em inglês) para que não ocorram erros nas configurações do arquivo de senhas.

Por razões de segurança, não coloque o arquivo .htpasswd no mesmo diretório do .htaccess.

Voltando ao .htaccess, adicione o código abaixo em seu arquivo para que o .htpasswd seja encontrado pelo servidor.

AuthUserFile /usr/local/nome-usuario-local/pasta-diferente-qualquer/.htpasswd
AuthGroupFile /dev/null
AuthName "Mensagem a ser exibida solicitando a senha"
AuthType Basic
Require valid-user

Substitua "nome-usuario-local" pelo nome do usuário do servidor local e "pasta-diferente-qualquer" pelo nome da pasta que escolheste para o arquivo .htpasswd . Ao lado de "AuthName" coloque a mensagem entre aspas que vai ser vista no navegador pelo usuário. Somente altere a segunda linha se for necessário, caso contrário deixe-a como está.

Não altere as duas últimas linhas, pois elas que vão tratar e filtrar os dados inseridos pelo usuário no navegador.

Pronto, agora o .htaccess está funcional e com um sistema básico de credenciais para acesso.


Alterando as páginas de erro padrão


Página de erro 404 padrão do apache
Você pode perguntar-se, "Por que eu faria isso? Elas não estão funcionando bem?". Sim, porém quando não muda-se as páginas padrão, elas exibem informações como a porta do seu servidor que está com o serviço httpd rodando, além de qual sistema operacional está rodando o apache (veja a imagem acima), então não é recomendável deixá-las padrão.

Para alterá-la é bem simples, vá até o .htaccess e adicione a seguinte linha

ErrorDocument 404 /new404.html

Substitua "404" pelo erro que deseja mudar e "/new404.html" pela página a qual deva ser exibida caso o erro ocorra. Não esqueça que cada redirecionamento tem de estar em uma linha sozinho.

Outro exemplo fictício:

ErrorDocument 404 /index.php
ErrorDocument 500 /index.php
ErrorDocument 401 /index.php
ErrorDocument 402 /index.php
ErrorDocument 403 /index.php

No exemplo acima, os erros foram redirecionados para a página principal do site.

Se quiser um guia completo de quais códigos numéricos de erro colocar no seu arquivo entre aqui na Wikipedia.

Bloqueando acesso a todas as pastas do servidor


Porque fazer isso? Para que evite que o usuário caia em páginas do tipo "index of /". Partindo do pressuposto de que seu servidor só precisa exibir páginas web, não é necessário deixar as pastas acessáveis externamente.

Fazer isso é bem simples, é só adicionar o código abaixo no arquivo .htaccess

Options All -Indexes

Pronto, as páginas do tipo "index of /" estarão inacessíveis pelo navegador.

Restringindo acesso a qualquer outro arquivo pelo navegador


Com o código abaixo colocado no seu arquivo .htaccess

<Files .htaccess>
Order Allow,Deny
Deny from all
</Files>

Substitua ".htaccess" na primeira linha pelo caminho do arquivo que quer bloquear.

Caso necessário, substitua a última linha por "Allow nome-usuario" (para liberar um usuário específico) ou "Allow valid-user" (para liberar qualquer usuário logado).


Dica extra


Uma ideia para bloquear o acesso remoto é bloquear qualquer arquivo de log, de backup e, caso seja da política da sua empresa, qualquer outro que não é para ser visto por ninguém, usando o código acima.

Já aviso que para cada arquivo vai ser necessário um novo bloco de código com o seu caminho, etc.


Conclusão


É possível que somente configurando corretamente o arquivo .htaccess a segurança do seu servidor seja aumentada drasticamente, principalmente contra as chamadas "dorks" e os script kiddies da vida.


Referências (em inglês)


http://stackoverflow.com/questions/11728976/how-to-deny-access-to-a-file-in-htaccess
http://httpd.apache.org/docs/current/howto/htaccess.html
https://www.digitalocean.com/community/tutorials/how-to-use-the-htaccess-file

Espero que tenha ficado claro e até a próxima pessoal.

"Grandes conhecimentos trazem grandes responsabilidades"

0 comentários:

Postar um comentário

Subscribe to RSS Feed Follow me on Twitter!