Como restringir acesso usando .htaccess
O .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:
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:
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.
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?
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.
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. :/
Cria um .htaccess com o seguinte comando:
Options -Indexes
Pronto, feito isso as imagens irão funcionar certinho, porém o diretório nunca será mostrado 😀
Top, funcionou perfeitamente.
Muito bom cara!
Parabéns, me ajudou muito em um projeto.
Fico muito grato.
Valeu Rafael!
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
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.
Vlw por acessar o blog! Respondendo a sua questão: não é possível, pois html, css e js rodam no browser.
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
Nesse caso, é interessante que exista apenas uma página de download e o acesso a essa página só pra logados.
Espero ter ajudado!
Abs!
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
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!
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,
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.
Oi Marcelo,
Pretendo saber se é possível restringir, por exemplo a 3 tentativas, o login no .htaccess.
Um abraço
Até onde eu sei, pra esse tipo de restrição precisa mesmo de um banco de dados.
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 ?
Ótimo post! Muito obrigado!
Bom dia,
Estou querendo limitar por 96 horas o acesso para upload de um determinado ficheiro através do .htaccess. Pode me ajudar?