Como restringir acesso usando .htaccess

apache-logoO .htaccess é um arquivo de configuração utilizado em servidores web Apache. Infelizmente, muitos desenvolvedores desconhecem os poderes desse arquivo.

Há várias ações que podem ser executadas num servidor web através do .htaccess. Algumas dessas possibilidades são: proteger o servidor contra ataques maliciosos, criar redirecionamentos, otimização do servidor web, reescrita de url, entre várias outras.

Neste texto irei mostrar como utilizar o arquivo .htaccess para controlar acesso a diretórios em
um website.

Nem todos os diretórios de um site devem ser de livre acesso. É evidente que existem áreas que não podem nem mesmo serem visualizadas irrestritamente, mas não é raro conseguirmos ver a listagem de arquivos de diretório simplesmente acessando uma url qualquer.

Provavelmente o leitor já se deparou com a situação mostrada no exemplo abaixo:

listagem_imagens

Esse tipo de acesso pode não ser preocupante, mas imaginemos que o diretório acessado possui arquivos que só devem ser baixados mediante pagamento, como em sites que vendem música, ou templates. Nesses casos o acesso aos arquivos devem ser restritos, já que você só vai querer liberar o acesso após o pagamento.

Para negar acesso a todos em determinado diretório basta criar um arquivo .htaccess com o conteúdo abaixo:

deny from all

Supondo que tal arquivo .htaccess foi colocado dentro do diretório chamado images, se alguém não autorizado tentar acessar site.com/images receberá a seguinte mensagem:

forbidden

No exemplo acima eu tentei não apenas visualizar o diretório, como também fazer o download do mesmo.

Permitindo acesso a determinados IP’s

Digamos que você tenha uma área administrativa dentro da seguinte hierarquia: site.com/system/admin, onde system e admin são diretórios internos e apenas pessoas autorizadas podem acessar. Provavelmente desejará listar determinados IP’s que terão acesso. Um arquivo .htaccess com as linhas abaixo resolveriam esse problema:

order deny, allow
deny from all
allow from 200.99.155.153

Negando acesso há determinados IP’s

Você também pode querer fazer justamente o contrário, permitir acesso a todos, menos determinados IP’s, como por exemplo, um bot mal intencionado. Para tal, basta escrever o arquivo .htaccess como no exemplo abaixo:

order allow, deny
deny from 98.76.54.32
allow from all

Como falado no início, o arquivo .htaccess oferece uma gama de possibilidades de ajustes ao servidor Apache e que através desse tipo de arquivo pode ser rápido e fácil personalizar as configurações da sua hospedagem de acordo com a necessidade do seu site.

21 Replies to “Como restringir acesso usando .htaccess”

  1. Boa noite Marcelo,

    Gostaria de bloquear IPs na pagina de cadastro apenas, ou seja, meu blog inteiro vai ficar disponivel pra todo mundo, mas para se registrar quero bloquear alguns paises. Já tenho a lista de Ips, mas ainda não sei bloquear a pagina especifica, nesse caso você explicou como bloquear tudo.

    Teria como?

    1. Com o .htaccess você restringe o acesso ao diretório. Se você quer negar acesso a apenas alguns IP’s, bastar usar deny from 127.0.0.1, colocando esse .htaccess na raiz do diretório que quer restringir.

  2. Ola Marcelo,
    tenho uma duvida com relacao a este .htaccess, eu criei ele coloquei na pasta de imagens ele fica barrando os usuarios na pasta certinho mas com isso ele barra tambem ate o proprio site.
    Tipo o cara faz um upload no site e quando tento mostrar a previsualizacao da imagem nao consigo porque o htaccess fica barrando tambem. Eu so quero que ele barre o acesso direto pelo usuario nao por uma tag html. :/

  3. Oi Marcelo,

    preciso de alguns ajustes no meu site como bloquear acesso direto à página de download, vc presta serviços de programação. grata

  4. olá! ótimo artigo. só tenho uma dúvida. queria proibir abertura do código fonte ou pelo menos proibir que um arquivo css ou js carregado na página seja aberto clicando no link que aparece na página do source code. é possível fazer isso pelo htacess? tentei passar o caminho por exemplo “view-source:http://marceloweb.info/como-restringir-acesso-usando-htaccess/” ou o caminho do arquivo como “http://www.marceloweb.info/wp-content/plugins/addthis/css/output.css” mas não deu certo. você tem alguma ideia de como resolver. agradeço.

  5. Olá Marcelo, excelente artigo! Parabéns.
    Mas eu tenho uma dúvida que estou me quebrando para resolver: Da forma que vc mostra, funciona perfeitamente, mas se o usuário digitar o caminho completo do arquivo na URL consegue visualizar, por exemplo se for um arquivo jpg.

    Estou trabalhando em um sistema que faz upload de imagens mas essas imagens só poderão ser vistas por usuários logados e as mesmas não poderão ser listadas em motores de busca como o Google. Eu consegui dificultar aplicando um nome aleatório para a imagem no upload usando md5. Mas eu sabendo o nome do arquivo consigo acessar. Usando .htaccess consigo bloquear o arquivo, mas ai acabo bloqueando para os users do sistema tbm! Se puder, lhe agradeço um dica! Abraço

      1. vc não prestou atenção na questão dele ???

        sua resposta não tem nada a ver…

        ele perguntou SE FOR DIGITADO PELA URL…

        o hacker pode muito bem criar uma conta no site e a partir dai estará logado, logo terá acesso a pagina e poderá digitar na url

        1. Meu amigo, eu entendi sim e já apliquei a solução passada. Pode restringir o acesso direto através do htaccess e criar uma página específica para o download. Pode/deve separar os arquivos por usuário e usar POST. Se quiser, caso necessário, pode até criptografar a url. Existem várias possibilidades, eu dei apenas uma idéia.

          Abs!

  6. Marcelo, preciso muito de sua ajuda

    Preciso bloquear meu site para os outros países, deixar liberado só para o brasil

    preciso urgente disso, gostaria de saber se vc pode me ajudar por gentileza.

    Att,

    1. Uma ideia é se basear em GeoIP e permitir apenas a faixa de IP’s do Brasil. Então seria algo assim no .htaccess: allow from 191.*.*.*. Sinceramente, não testei, mas acho que funciona.

  7. Oi Marcelo,

    Pretendo saber se é possível restringir, por exemplo a 3 tentativas, o login no .htaccess.
    Um abraço

  8. Olá Marcelo,

    Estou utilizando o Joomla e gostaria de restringir acesso ao admin do site somente para um ip, utilizei o formato informado no seu post e adicionei o meu ip no caso, mas ele ainda assim me bloqueia também.

    Poderia ajudar ?

Deixe um comentário para Marcelo Oliveira Cancelar resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Time limit is exhausted. Please reload CAPTCHA.