Pegue os engraçadinhos que fazem hotlink de imagens

Você está cansado dessas pessoas que pegam a URL das suas imagens e lascam no blog/site delas e acabam usando a sua banda sem que você tenha dado permissão? Copiar as imagens do meu blog para outros sites eu não vejo problema, mas usar a banda do meu servidor eu não gosto.

Pois bem, a tirinha de hoje do Nerdson ilustra muito bem o problema dos hotlinks de imagens. Ela é, como sempre, muito didática.

(Como a tirinha é muito grande, adianto que depois dela coloco a solução para o problema do hotlink de imagens)

(A propósito, eu não estou fazendo hotlink da tirinha, copiei a imagem para o meu servidor 🙂 )

Para resolver esse problema, você pode editar o .htaccess do seu servidor (caso ele seja Apache), e incluir as seguintes regras:

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://([^.]*\.)?meusite\.com\.br
RewriteCond %{HTTP_REFERER} !^http://([^.]*\.)?(google|yahoo|hotmail)\.com
RewriteRule (minha_pasta_de_imagens.*\.(gif|jpg|jpeg|png)$) http://www.meusite.com.br/forbid.jpg [L]

Vamos entender linha por linha o código acima:

RewriteEngine On

Obviamente ativa o Módulo Rewrite do Apache para que ele possa re-escrever os endereços de acordo com as regras. (maiores informações sobre o mod_rewrite)

As próximas regras só ativarão a reescrita se todas forem cumpridas. Caso uma delas não seja verdadeira, o apache vai retornar a página solicitada.

RewriteCond %{HTTP_REFERER} !^$

Retorna verdadeiro se o Referer não for vazio. Se for vazio, é sinal de que vem do próprio site o pedido.

RewriteCond %{HTTP_REFERER} !^http://([^.]*\.)?meusite\.com\.br

Retorna verdadeiro se o Referer não for do domínio do seu site/blog. A expressão ([^.]*\.)? quer dizer “qualquer sequência de caracteres que não seja ponto seguida de um ponto”. A interrogação no final da expressão indica que ela é opcional. Neste caso você libera o acesso a http://www.meusite.com.br ou http://qualquercoisa.meusite.com.br ou http://meusite.com.br

RewriteCond %{HTTP_REFERER} !^http://([^.]*\.)?(google|yahoo|hotmail)\.com

Retorna verdadeiro se o Referer não for dos domínios *.google.com, *.yahoo.com, *.hotmail.com.
Faço isso para excluir da regra esses domínios para evitar que pessoas que lêem seu site/blog pelo feed ou por webmail não sejam afetadas pela regra. Você pode adicionar outras regras parecidas com essas para excluir outros domínios.

RewriteRule (minha_pasta_de_imagens.*\.(gif|jpg|jpeg|png)$) http://www.meusite.com.br/forbid.jpg [L]

Finalmente a regra que redireciona o pedido para a imagem que você quiser.

IMPORTANTE: Substitua minha_pasta_de_imagens pela pasta do seu servidor que contém as imagens. No caso dos blogs baseados em WordPress, é a pasta wp-content/uploads. Essa regra só vale para os arquivos gif, jpeg, jpg e png.

O [L] do final da regra indica que o apache não deve usar outra regra depois dessa, muito útil para quem tem outras regras no seu mod_rewrite.

No caso do meu blog, coloquei uma imagem marota (pode copiar à vontade, mas sem fazer hotlink, 🙂 ) para aparecer nos sites/blogs dos que ficam fazendo hotlink das minhas imagens.

te peguei

Seja criativo, mas não baixe o nível. 🙂

Comments on this entry are closed.

  • Hahaha Amei o post! Super útil e bem explicado! =)

    bjs

  • Aknaton

    Buenas!
    Mas tu sabes que eu desconhecia por completo esse tal de hotlink !
    E o pior cansei de fazer isso na maior das inocência !
    Muito bom o artigo,bastante claro e didático!
    Assim o qüera aqui não fica fazendo mer** !

  • Muito bom! Já usei muito esse rewrite, só que eu colocava um horário também, ou seja, dependendo do horário posso permitir ou não o hotlink das minhas imagens.

    Para adicionar a restrição de horário, bastam mais duas linhas:

    RewriteCond %{TIME_HOUR}%{TIME_MIN} >0800
    RewriteCond %{TIME_HOUR}%{TIME_MIN} <1700

    Ou seja, entre 08h e 17h não permito o hotlink, nos demais horários, não tem problema.

    Estas duas linhas devem ser adicionadas antes da RewriteRule..

    Forte abraço.

  • Boa tarde José Antonio
    Primeiro queria parabenizar, ótimo POST

    Só tenho algumas dúvidas
    Eu estou fazendo trabalho de SEO na pagina http://www.guiadaembalagem.com.br e tentei utilizar essa regra no arquivo .htacess

    Copiei uma imagem do site, e fiz um “<img src" com um hotlink direto para uma outra pagina de teste que esta em outro servidor
    Funcionou perfeitamente

    Ele simplimsente não mostra a imagem…

    Só que aconteceu o seguinte… a imagem do site original tambem sumiu! É assim mesmo ? Tem como reverter isso ?
    Ao tentar acessar a url da imagem novamente apareceu apenas o caminho da imagem "textualmente"

    Eu fiz alguma coisa errada ?

    RewriteCond %{HTTP_REFERER} !^$
    RewriteCond %{HTTP_REFERER} !^http://(www.)?guiadaembalagem.com(/)?.*$ [NC]
    RewriteRule .*.(gif|jpg|jpeg|bmp|zip|rar|mp3)$ – [F,NC]

    Abraços

  • José Antonio

    Gabriel, você precisa acertar a expressão regular da segunda condição:

    Experimente trocar:
    RewriteCond %{HTTP_REFERER} !^http://(www.)?guiadaembalagem.com(/)?.*$ [NC]

    por:
    RewriteCond %{HTTP_REFERER} !^http://(www\.)?guiadaembalagem\.com\.br [NC]