Evitando o Hot Link de imagens usando o Mod_rewrite

Está notando o uso de banda do seu blog/site crescer e não sabe o porque ?
Possivelmente, estão começando a fazer o famoso Hot Link de imagens do seu blog/site em outros locais.

Um jeito fácil de olhar isto, é através do log do seu blog. Você vai notar  várias requisições vindas de algum endereço em particular a imagens. 

187.39.61.204 - - [24/Mar/2011:17:52:42 -0700] "GET /files/arquivos/terrabiblica.jpg HTTP/1.1" 403 2365 "http://algumlugar.com/i/noticias/74/74177-apple-retira-aplicativo-para-iphone-ofensivo-aos-gays/index.html" "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.151 Safari/534.16"
189.122.147.118 - - [24/Mar/2011:17:56:12 -0700] "GET /files/arquivos/terrabiblica.jpg HTTP/1.1" 403 2365 "http://algumlugar.com/i/noticias/74/74177-apple-retira-aplicativo-para-iphone-ofensivo-aos-gays/index.html" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0) Gecko/20100101 Firefox/4.0"
189.122.147.118 - - [24/Mar/2011:18:04:36 -0700] "GET /files/arquivos/terrabiblica.jpg HTTP/1.1" 403 2217 "http://algumlugar.com/i/noticias/74/74177-apple-retira-aplicativo-para-iphone-ofensivo-aos-gays/index.html" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0) Gecko/20100101 Firefox/4.0" 

Hoje, eu tive um problema assim. Como meu plano na Dreamhost fornece é ilimitado em banda, eu acabei tirando estes filtros a um tempo atrás.
Só que aí veio o outro efeito. Muito Hot Link além da banda, gera mais acessos. E mais acessos, também consumo de CPU e afins.
Ou seja, no fim, eu hoje perdi um tempo fazendo o bloqueio do Hot Link de imagens. 

E como é feito isto ? O processo é todo feito utilizando o mod_rewrite do Apache.

Assim, todas as dicas aqui podem ser usadas no seu httpd.conf ou até no seu .htaccess do diretório root do seu domínio. 

O primeiro passo para fazer o "bloqueio" do Hot Link no seu dominio, pode ser feito assim ( adicione no seu .htaccess ou httpd.conf , respectivamente ) : 

SetEnvIfNoCase Referer "^http://www\.ataliba\.eti\.br/" banimages=1
SetEnvIfNoCase Referer "^http://ataliba\.eti\.br/" banimages=1
SetEnvIfNoCase Referer "^$" banimages=1
<FilesMatch "\.(gif|png|jpe?g)$">
Order Allow,Deny
Allow from env=banimages=1
</FilesMatch>

Ou então, você pode usar este código aqui :

RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?ataliba.eti.br/.*$ [NC]
RewriteRule ^.*\.(bmp|tif|gif|jpg|jpeg|jpe|png)$ - [F] 

Para redirecionar a pessoa para uma imagem qualquer que você queira, é só utilizar a série abaixo: 

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?ataliba\.eti\.br/.*$ [NC]
RewriteRule .*\.(gif|jpe?g|png)$ https://cybernetus.com/chato.jpg [R,NC,L] 

O grande problema de  fazer assim, é que você vai bloquear inclusive o Google e o Feedburner caso você os use, então use alguns condicionais para resolver este problema: 

RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?ataliba\.eti\.br/ [NC] [OR]
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?ataliba\.net/ [NC] [OR]
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?google.com(.+.)?/ [NC] [OR] RewriteCond %{HTTP_REFERER} !^http://(.+\.)?feeedburner.com(.+.)?/ [NC]
RewriteRule .*\.(bmp|tif|gif|jpg|jpeg|jpe|png)$ - [F]


No exemplo acima, se as requisições vieram do site ataliba.net , ataliba.eti.br, google.com ou feedburner.com, o Hot Link das imagens será aceito :-) 

Resumo, com isto, você se livra daqueles infelizes que ficam roubando sua banda e ainda, aumentando a carga no seu servidor, simplesmente porque não querem fazer o upload de uma imagem  :-) 

Após estas configurações, se quiser testar se elas estão funcionando, clique aqui. Este site fornece um testador se sua imagem pode ser mostrada ou não, através do hot link.