Palavra:   

Revista PHP / Miscelânea

Flávia Jobstraibizer

Analista de sistemas, DBA Mysql, PostgreSQL, Oracle, SQLServer e Firebird. Desenvolvedora de sistemas, e administradora de servidores FreeBSD. Conheça o site www.flaviajobs.com.br

Truques com .htaccess - Parte I

Pra quem já desenvolve há algum tempo soluções online - sejam meros sites ou sistemas complexos -, sabe que uma das grandes ferramentas para proteção de conteúdo é o arquivo .htaccess.

Presente em 100% dos servidores da linha IX, ele não serve apenas para isso, como a maioria pensa. Tem muitas outras utilidades. Neste artigo vou abordar algumas, pra deixar claro o que alguns não entendiam, e apresentar o que outros não conheciam.

Antes de mais nada, é bom dar uma visitada na documentação online do .htaccess. É um excelente guia de referência para quem deseja utilizar a segurança que ele proporciona em várias das tarefas que pode realizar: http://httpd.apache.org/docs/1.3/howto/htaccess.html

Um dos usos mais comuns para o .htacces é a já famosa proteção de diretórios. Quando se quer tornar uma asta particular, você tem algumas simples linhas que podem bloquear o acesso à pasta e torná-la acessível apenas para quem tenha um nome de usuário e senha.

Dentro dos servidores, estes usuários e senhas podem ficar armazenados em arquivos de senha chamados .htpasswd. Neste artigo vou tratar esta forma, que é a mais usual.

Muitos desenvolvedores, usam ferramentas de geração de arquivos .htaccess, porém na hora de criar um arquivo na mão, pra alguma outra utilidade, não conseguem. Isso se deve ao fato de não conhecerem a verdadeira utilidade de cada um dos seus parâmetros, ou pelo menos, dos mais importantes.

Como é o arquivo de senhas do .htaccess?
PHP
  1. revistaphp:#78$1lX899e5fDPH1jPk
  2. flavia:62V4UJ/K/c/Wc$3879gsrr9*
  3. fulanodetal:81x8xIBUZnuLw438785/45s
www.revistaphp.com.br
Veja que o usuário é o primeiro item, separado por dois pontos e logo depois a senha criptografada. Este é mais um dos motivos pelos quais o .htaccess é seguro. Sua criptografia é muito potente. Sendo assim, você pode separar os usuários com suas senhas, em um arquivo especial, afim de melhor organizá-los. E se você ainda tem dúvida, sim, o arquivo não tem nome, apenas extensão (.htpasswd).

E como é um arquivo de proteção de pasta, comum?
PHP
  1. AuthUserFile /usr/local/do/servidor/diretorioquevouproteger/.htpasswd
  2. AuthGroupFile /dev/null
  3. AuthName AreaRestritadoSite
  4. AuthType Basic
  5. <Limit GET>
  6. require user revistaphp
  7. require user flavia
  8. </Limit>
www.revistaphp.com.br
Note que eu estou chamando um arquivo padrão de senhas. E dentro dele, quero apenas os usuários "revistaphp" e "flavia", pois informei ao .htaccess que apenas estes dois usuários tem direito de acesso à pasta protegida.
O resultado deste script será a famosa janelinha solicitando a autenticação.

Para a geração do arquivo de senhas, existem muitos sites que fornecem serviços de geração, como por exemplo o http://home.flash.net/cgi-bin/pw.pl . Note que você digita o usuário e senha, e ele já gera pra você. Isso é bastante útil caso você esteja criando um arquivo .htpasswd na mão, pois a senha precisa estar criptografada para que o arquivo seja corretamente compreendido. Porém com os arquivos .htaccess, recomendo que você se familiarize e aprenda a trabalhar com eles o mais manualmente possível. ;)

Ainda na parte de segurança, você já deve ter se deparado com sites sem conteúdo e que permitem a listagem de pastas e diretórios para qualquer um navegar. Isso é uma grave falha de segurança, que deve ser evitada. Já foi-se o tempo em que colocar uma paginazinha index.qualquercoisa resolvia o problema. Hoje em dia, use sempre .htacess pra evitar a listagem, pois isso evita que um usuário mal intencionado saiba realmente o que tem nos seus diretórios. E além disso, a menos que você seja completamente louco de criar um index pra cada pasta do seu servidor, você será inteligente o bastante pra perceber a vantagem de um único arquivo fazer isso por você.

PHP
  1. Options Indexes
  2. order deny,allow
www.revistaphp.com.br
Viu como não doeu? Isso está impedindo a listagem de diretórios geral. Obviamente você pode colocar mais funções aí, como por exemplo:

Liberar apenas o Ip tal:
PHP
  1. Allow from 200\.200\.200.200
www.revistaphp.com.br

Liberar apenas o ip tal e mais um dominio:
PHP
  1. Allow from revistaphp.com.br
  2. Allow from flaviajobs.com.br
www.revistaphp.com.br
Liberar apenas para usuários autenticados como já vimos acima, etc!

Na segunda parte deste artigo, vou mostrar mais grandes funções do .htaccess!
Aguardem!

Opções de Interação

Comentários

Pasta com permissão 0777
Por: Aramis, 12/05/2010   06:29:35
Olá,

Tenho 35 sites em um servidor dedicado, com sistemas de noticias, leis, agenda, produtos, suporte, etc ... todos estes com sistemas php para enviar arquivos e imagens para o servidor.

Fica complicado deixar a pasta em 0777 pois ja invadiram o sistema.

Se deixar com a permissão 0755 o php não envia arquivos nem imagens, da erro de permissão de pasta.

Se fizar com script ftp em php, também não da por que o servidor permite somente 3 conexões simultâneas, e isso fica inviável em 35 sites.

Então, estou com este problema, tentei colocar o comando chmod(), porém temos que ter os arquivos com o mesmo proprietário, onde compromete a segurança também.

Fiz um arquivo .htaccess :
<Files ~ "\.(pl|php|cgi|spl|scgi|fcgi|js|sh|shtml|jsp)$">
Order allow,deny
Deny from all
Satisfy All
</Files>
Será que vai adiantar ??
LoL
Por: Kaio, 29/09/2009   15:57:27
caramba moça! quando eu crescer quero ser igual a vc! *-* rsrs brinks ja sô grande :B

no mas vc sabe muito, parabens, e vlw pela ajuda ai, esses tutos tão salvando a pátria ^^
Oi Flávia
Por: Gabriel, 24/08/2009   15:38:33
Estou gostando muitos destes artigos vou para o segundo deste módulo vlw. Obrigado. Sou seu fã.