Apache – HTTP Server Project:
Ficheiro .htaccess
Quarta-feira, 07 de Abril de 2010
Trabalho elaborado por:
Tiago Bem Nº8309
Vasco Silva Nº11782
Desenvolvimento de Aplicações WEB
Mestrado em Engenharia Informática
APACHE – HTTP Server Project
Ficheiro .htaccess
2
CONTENTS
1 Introdução ............................................................................................................................. 3
2 O Ficheiro .htaccess – O que é? ............................................................................................ 4
3 Autenticação e autorização ................................................................................................... 5
4 Mensagens de erro................................................................................................................ 7
5 Definir a página a ser carregada por omissão ....................................................................... 8
6 Redireccionamento ............................................................................................................... 9
7 Bloquear o acesso por Endereço IP ..................................................................................... 10
8 Bloquear o acesso a ficheiros .............................................................................................. 11
9 Bloquear a listagem de ficheiros ......................................................................................... 12
10 Conclusão ............................................................................................................................ 13
APACHE – HTTP Server Project
Ficheiro .htaccess
3
1 INTRODUÇÃO
Este trabalho enquadra-se no âmbito da disciplina de Desenvolvimento de Aplicações Web
coordenada pelo Prof. Doutor Carlos Costa.
O trabalho tem como objectivo a explanação do ficheiro .htaccess de forma a enumerar todas
as suas funcionalidades/potencialidades e expôr a sua configuração com exemplos práticos.
APACHE – HTTP Server Project
Ficheiro .htaccess
4
2 O FICHEIRO .HTACCESS – O QUE É?
O ficheiro .htaccess é um ficheiro que permite definir um conjunto de parâmetros e
funcionalidades no site(directoria e sub-directorias) onde este está localizado.
Existem imensas utilidades na configuração deste ficheiro o que pode ser bastante útil para
quem desenvolve aplicações Web e que pretende necessita de alguma parametrização extra,
para além da definidade globalmente no Apache.
Todas as funcionalidades que este ficheiro disponibiliza, estão também disponíveis no ficheiro
global de configurações do apache. Qualquer configuração que esteja definida no .htaccess
prevalece sempre sobre o ficheiro global de configurações do apache. Na prática, o apache
carrega as configurações globais do apache, de seguida as do ficheiro .htaccess, fazendo um
overwrite em configurações que já tenham sido declaradas.
Este ficheiro é normalmente utilizado em serviços de alojamento, em que devido a questões
óbvias de segurança, os utilizadores não tem acesso ao ficheiro global de configurações do
apache, assim, através desta forma podem definir a configuração apenas no site em que tem
acesso. Ainda assim, é necessário que o ficheiro de configuração global do Apache permita que
a utilização dos ficheiros .htaccess, para isso isso é utilizado o parâmetro AllowOverride. A
possiblidade da execução deste ficheiro tem custos em termos de performance e segurança.
Em performance, pois o apache tem que fazer um carregamento de configurações extra por
cada .htaccess existente, e em segurança pois com este ficheiro é dificil manter uma base de
configurações homógenea em todo o servidor. Devido a estes aspectos, existem serviços de
alojamento que não permitem a execução destes ficheiros.
Nos casos em que podemos editar o ficheiro global de configurações do Apache, deve ser este
a ser utilizado, uma vez que também nos permite aplicar diferentes configurações a diferentes
sites através da directiva <directory> </directory>, e evitar desta forma o uso dos ficheiros
.htaccess. Desta forma ganhamos performance, segurança e facilidade de administração, visto
ficar a administração centralizada num único ficheiro.
Tal como já foi descrito acima, este ficheiro pode definir imensas funcionalidades. Foi feita
uma selecção das mais usadas nestes ficheiros. Nos pontos seguintes estas são apresentadas e
sucintamente explicadas acompanhadas com um exemplo prático. As funcionalidades
seleccionadas foram: autenticação e autorização, mensagens de erro, página por omissão,
redireccionamento, bloqueio de endereços IP, bloquio de acesso a ficheiros e bloqueio de
listagem de ficheiros.
APACHE – HTTP Server Project
Ficheiro .htaccess
5
3 AUTENTICAÇÃO E AUTORIZAÇÃO
Hoje em dia existem inúmeras formas e mecanismos de autenticação para controlar os acessos
a áreas restritas de sites. Através do ficheiro .htaccess podemos também criar áreas restritas
em sites e gerir os respectivos acessos. As grandes vantagens comparando com outros
mecanismos, são:
Este ser corrido ao nível do apache, não havendo assim a possibilidade de haver um
buraco de segurança, e os conteúdos ficarem expostos;
Nos casos em que apenas são alojados ficheiros “soltos” (apenas para download, sem
qualquer página .html,.php,etc), não existe necessidade de criar um “mini site” apenas
para efectuar a autenticação;
A facilidade de implementação deste mecanismo – é feito apenas com algumas
entradas no ficheiro .htacces, em conjunto com um ficheiro .htpasswd.
A lista de utilizadores é guardada num ficheiro .htpasswd. O conteúdo do ficheiro é de uma
entrada para cada utilizador no formato <user>:<password>.
Exemplo prático:
É utilizado o comando htpasswd para fazer a administração dos utilizadores.
Para criar o ficheiro de passwords em /etc/.htpasswd com um utilizador – user1 é utilizado o
comando:
htpasswd -c /etc/.htpasswd user1
Este comando pede para inserir uma password(a password inserida foi:“user1”). É então
criado o ficheiro com o conteúdo:
user1:oKKfw4JJeeG4M
No ficheiro .htaccess é necessário associar o ficheiro .htpasswd a ser utilizado. É então criado o
ficheiro .htaccess com o conteúdo:
AuthUserFile /etc/.htpasswd
AuthType Basic
AuthName "Autenticacao teste atraves de .htaccess para a cadeira de
DAW"
Require valid-user
AuthUserFile: caminho para o ficheiro .htpasswd;
AuthType: Tipo de autenticação a ser utilizada;
AuthName: Mensagem a ser apresentada na janela de autenticação;
Require valid-user: Qualquer utilizador no ficheiro .htpasswd poderá aceder ao site.
Para adicionar utilizadores ao ficheiro .htpasswd é usado o comando:
APACHE – HTTP Server Project
Ficheiro .htaccess
6
root@desktop:/var/www/daw# htpasswd -mb /etc/.htpasswd tiago tiagopwd
root@desktop:/var/www/daw# htpasswd -mb /etc/.htpasswd vasco vascopwd
O conteúdo do ficheiro /etc/.htpasswd após a execução desttes comandos será:
user1:oKKfw4JJeeG4M
tiago:$apr1$c3/xcxJn$NysAo.KY8A/PZtgPvAcE00
vasco:$apr1$d3MaKNij$N48z8SnReNhBojfCwdLNa.
Com a existência de vários utilizadores no ficheiro .htpasswd, podemos configurar para que
apenas alguns possam efectuar login, ao invés do exemplo anterior em que todos poderiam
efectuar. No exemplo abaixo, apenas os utilizadores vasco e tiago poderão efectuar login.
AuthUserFile /etc/.htpasswd
AuthType Basic
AuthName "Autenticacao teste atraves de .htaccess para a cadeira de
DAW"
Require user vasco
Require user tiago
A autenticação através de um ficheiro .htpasswd é o mais utilizado com este mecanismo.
Existe também a possiblidade de ligar a lista de utilizadores a uma base de dados, ou aos
utilizadores do sistema, mas, torna-se mais complexo e nesse caso já é aconselhável utilizar
outros métodos.
APACHE – HTTP Server Project
Ficheiro .htaccess
7
4 MENSAGENS DE ERRO
Através do .htaccess é possível configurar as páginas de erro do servidor apache.
Para isso é necessário que tenhamos uma noção dos erros possíveis quando tentamos aceder
a uma página e dos códigos que lhes estão associados.
Os códigos mais utilizados são o 404 e o 500. O 404 é usado para quando uma página não é
encontrada. O erro com o código 500 está associado a erros provenientes da execução de
script internos.
Também poderá ser útil a configuração da página com o erro 401 que é apresentada quando a
página precisa de autenticação para a sua visualização.
Existem mais dois erros que também poderão ser configurados, o erro com o código 400 e o
erro com o código 403. O erro 400 – Bad Request ocorre quando os clientes de alguma forma
tentam modificar o URL de acesso ou uso de scripts para tentar de alguma forma alterar o
comportamento normal da pagina. O erro 403 – Forbidden está associado ao facto de se
querer aceder a um ficheiro ou pasta do qual não tem permissões.
Para configurar as páginas de erro basta acrescentar ao ficheiro .htaccess algumas linhas de
código que de seguida serão mencionadas no exemplo prático. As mensagens que aparecem
não são mais do que um simples ficheiro HTML que pode ser configurado como pretender.
Exemplo prático:
Para configurar o erro com o código 400 basta inserir a seguinte linha dentro do ficheiro
.htaccess:
ErrorDocument 400 /errors/badrequest.html
Primeiro específica o tipo de erro que pretende e de seguida fornece o caminho para a página
de erro. Se quiser editar a forma como erro aparece basta editar o ficheiro .html
correspondente ao código do erro e depois escrever o html que desejar.
Para os outros tipos de erro as linhas a adicionar seriam:
ErrorDocument 401 /errors/authreqd.html
ErrorDocument 403 /errors/forbid.html
ErrorDocument 404 /errors/notfound.html
ErrorDocument 500 /errors/serverr.html
APACHE – HTTP Server Project
Ficheiro .htaccess
8
5 DEFINIR A PÁGINA A SER CARREGADA POR OMISSÃO
Habitualmente, quando inserimos um endereço no browser, que é um caminho/directoria, e
não o destino final para o ficheiro, o servidor vai procurar por uma lista de ficheiros nessa
directoria, se encontrar algum, mostra esse ficheiro. Essa é a lista de ficheiros por omissão,
normalmente é constituída por os seguintes ficheiros : index.html, index.htm, default.html...
Nos casos em que queremos colocar uma página por omissão com um nome diferente do
acimo referido, por exemplo index.php, torna-se chato ser necessário criar um index.html que
reencaminhe para o index.php. Nestes casos, podemos alterar o ficheiro, ou a lista de ficheiros
a carregar por omissão.
O ficheiro .htaccess permite alterar a lista de ficheiros por omissão. Na execução, o servidor irá
procurar os ficheiros sequencialmente, o primeiro a ser encontrado na directoria, é o que é
apresentado.
Exemplo prático:
DirectoryIndex firstIndex.html secondIndex.html daw.html
APACHE – HTTP Server Project
Ficheiro .htaccess
9
6 REDIRECCIONAMENTO
Existem muitas formas de redireccionar páginas, pode ser feito através de javascript , http-
equiv ou scripts no lado do servidor em PHP, Java, C# etc…
O .htaccess também possibilita o redireccionamento de páginas e em certos casos até pode ser
mais simpático conseguindo-o fazer de uma forma muito simples.
O que o .htaccess faz é usar o Redirect para verificar os pedidos a páginas ao servidor e se ele
encontrar a página pedida redirecciona para a que for configurada.
Exemplo prático:
Linha a adicionar ao .htaccess
Redirect /origem/origem.html http://site.com/destino/destino.html
Basicamente, este procedimento passa por adicionar o comando Redirect com o caminho da
página origem(que se pretende fazer o redireccionamento) e de seguida colocar caminho Web
para a página de destino.
APACHE – HTTP Server Project
Ficheiro .htaccess
10
7 BLOQUEAR O ACESSO POR ENDEREÇO IP
O bloqueio de determinados endereços IP, é usado normalmente em duas situações, ou
porque queremos realmente bloquear um IP (suspeita de hacking, troca de demasiado
tráfego,endereço IP suspeito, etc...), ou então queremos apenas permitir uma lista de IP's
limitada. Basicamente, a forma de efectuar esta configuração é: “Acedem todos excepto
excepto estes” ou “Não acede ninguém excepto estes”. Abaixo, poderemos ver um exemplo de
cada.
A entrada order, indica a ordem com que as regras são corridas. Não interessa a ordem por
que elas aparecem no ficheiro mas sim a ordem definida na cláusula order. Se tivermos order
deny allow, as regras de allow são prioritárias sobra as deny (pois são corridas depois, ficando
estas a prevalecer), caso tenhamos order allow deny, prevalecem as regras deny. O modo de
funcionamento da entrada order é sempre este.
Exemplo prático:
A seguinte regra bloqueia o acesso a qualquer endereço IP excepto o da própria máquina - 127.0.0.1:
order deny,allow
deny from all
allow from 127.0.0.1
A seguinte regra bloqueia o acesso da própria máquina - 127.0.0.1:
order allow,deny
allow from all
deny from 127.0.0.1
APACHE – HTTP Server Project
Ficheiro .htaccess
11
8 BLOQUEAR O ACESSO A FICHEIROS
Conseguir evitar que certos ficheiros possam ser visíveis através do browser é sem dúvida uma
funcionalidade muito útil. Se considerarmos que o ficheiro .htaccess por algum lapso estiver
com permissões 755 ou 777, será possível a quem o tentar aceder ver a sua configuração e
posteriormente o acesso a uma página por exemplo.
O mesmo pode acontecer com outros ficheiros críticos em que o webmaster tem interesse em
que ninguém lhes possa aceder.
Exemplo prático:
Linhas a adicionar ao .htaccess
<Files .htaccess>
order allow,deny
deny from all
</Files>
No exemplo acima, podemos ver como bloquear o acesso ao ficheiro .htaccess. O mesmo pode
ser feito com os outros ficheiros basta alterar o nome do ficheiro.
APACHE – HTTP Server Project
Ficheiro .htaccess
12
9 BLOQUEAR A LISTAGEM DE FICHEIROS
A possiblidade de listar as directorias é uma importante funcionalidade de um web server.
Podemos querer permitir que se liste, ou não, os ficheiros consoante as situações. Por
exemplo, se tivermos uma directoria, onde guardamos uma lista de ficheiros a partilhar, será
interessante que seja possível listar todo o conteúdo dessa directoria. Numa outra situação em
que o que temos alojado é um site com toda a sua estrutura, não queremos expôr todo o site
por diversos motivos óbvios(segurança, cópia de conteúdos, etc...).
As configurações do apache vem actualmente com a opção de listagem desactivada. De
seguida é apresentado como podemos activar ou desactivar esta opção através do ficheiro
.htaccess.
Exemplo prático:
Activar a opção de listagem:
Options +indexes
Desactivar a opção de listagem:
Options -indexes
Se não pretendermos desactivar a listagem de todos os ficheiros, mas sim, apenas de alguns podemos indicar os que não queremos que sejam listados. No exemplo seguinte, todos os ficheiros de extensão jpg e o ficheiro teste.html deixão de ser listados:
IndexIgnore *.jpg teste.html
APACHE – HTTP Server Project
Ficheiro .htaccess
13
10 CONCLUSÃO
Podemos concluir com este trabalho que o ficheiro .htaccess está integrado num interessante
mecanismo do Apache, que possiblita ao utilizador sem acessos de administração do apache,
mas com acesso de escrita ao seu site, fazer a configuração deste.
Este mecanismo exige alguma organização da parte de quem utiliza os ficheiros .htaccess, pois
se estes não foram utilizados devidamente podem criar alguma redudância e incoerências de
configuração.
É um ficheiro com grandes potencialidades, mas que deve ser definido com algum cuidado
para que não se torne um problema na configuração do web-server.