Para los que no sepan muy bien que es el Hotlinking, os resumiré que se trata de un tipo de robo ya sea accidental o intencional en el cual alguien copia el enlace de un fichero hospedado en tu servidor para usarlo en su propia web, en consecuencia cada vez que se haga una petición del fichero en esa web este se descargará desde tu servidor consumiendo el ancho de banda sin permiso. Este tipo de robo es más comun con imagenes aunque se puede hacer con cualquier tipo de fichero.
Antes de continuar has de saber que existen otras alternativas como una de las funcionalidades del CPanel o un plugin para Wordpress, en mi caso no dispongo del CPanel y el plugin no tiene toda la funcinalidad que necesito, nosotros tomaremos ventaja del fichero .htaccess. La técnica consiste en un filtro por el cual cada vez que se realice la petición por un fichero de cierto tipo, el servidor examinará antes si esta petición proviene de nuestra web o de alguna de las webs amigas, en caso afirmativo el fichero será suministrado, de lo contrario el servidor realizará otra acción determinada. Os presento directamente el código a insertar en el fichero .htaccess, el cual analizaré posteriormente explicando que podemos hacer cuando la petición sea ilícita:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
# Options +FollowSymlinks
RewriteCond %{REQUEST_FILENAME} \.(jpg|png|gif|bmp)$ [NC]
RewriteCond %{HTTP_REFERER} !^$ [NC]
RewriteCond %{HTTP_REFERER} !tu_ web\.com [NC]
RewriteCond %{HTTP_REFERER} !feedburner\.com [NC]
RewriteCond %{HTTP_REFERER} !bloglines\.com [NC]
RewriteCond %{HTTP_REFERER} !newsgator\.com [NC]
RewriteCond %{HTTP_REFERER} !netvibes\.com [NC]
RewriteCond %{HTTP_REFERER} !newsalloy\.com [NC]
RewriteCond %{HTTP_REFERER} !gritwire\.com [NC]
RewriteCond %{HTTP_REFERER} !rojo\.com [NC]
RewriteCond %{HTTP_REFERER} !blogrovr\.com [NC]
RewriteCond %{HTTP_REFERER} !alesti\.org [NC]
RewriteCond %{HTTP_REFERER} !fastladder\.com [NC]
RewriteCond %{HTTP_REFERER} !google\. [NC]
RewriteCond %{HTTP_REFERER} !yahoo\. [NC]
RewriteCond %{HTTP_REFERER} !msn\. [NC]
RewriteCond %{HTTP_REFERER} !ask\. [NC]
RewriteCond %{HTTP_REFERER} !altavista\. [NC]
RewriteCond %{HTTP_REFERER} !attensa\.com [NC]
RewriteCond %{HTTP_REFERER} !search\?q=cache [NC]
RewriteRule (.*) http://www.otro_servidor.com/imagen_alt.jpg [NC,L]
</IfModule>
Análisis:
La primera instrucción a tener en cuenta es la siguiente:
# Options +FollowSymlinks
Si tu servidor te da un “500 Internal Server Error” deberás borrar la almohadilla (#) para activar la instrucción. El error significa sólo que tu servidor no está configurado por defecto con la instrucción FollowSymlinks, con lo cual te toca hacerlo a ti.
En el siguiente paso declaramos las extensiones de los ficheros a proteger, la cláusula [NC] indica al servidor que ignore la capitalización de las letras:
RewriteCond %{REQUEST_FILENAME} \.(jpg|png|gif|bmp)$ [NC]
Si deseas más ficheros como por ejemplo videos entonces modificaremos la declaración de la siguiente manera:
RewriteCond %{REQUEST_FILENAME} \.(jpg|png|gif|bmp|avi|wmv|mpg|flv)$ [NC]
A continuación instruimos al servidor que si la petición del fichero proviene de alguien que no especifica su Referer entonces debemos entregárselo de todos modos.
RewriteCond %{HTTP_REFERER} !^$ [NC]
Esto es muy importante ya que muchas personas no muestran esta información para proteger su privacidad, y siendo esto legítimo no queremos bloquear posiblemente a cientos de lectores.
Seguimos con la instrucción más importante.
RewriteCond %{HTTP_REFERER} !tu_web\.com [NC]
De esto modo se especifica que nuestra web ha de tener siempre acceso a todos los ficheros filtrados. En este ejemplo deberás modificar los datos resaltados con la dirección de tu página.
El siguiente paso es definir las webs amigas, estas son las páginas externas que quieres permitir que enlacen tus imágenes.
......... ...... ...
RewriteCond %{HTTP_REFERER} !feedburner\.com [NC]
RewriteCond %{HTTP_REFERER} !bloglines\.com [NC]
RewriteCond %{HTTP_REFERER} !newsgator\.com [NC]
RewriteCond %{HTTP_REFERER} !google\. [NC]
RewriteCond %{HTTP_REFERER} !yahoo\.com [NC]
......... ...... ...
En realidad podrías ignorar esta sección por completo y no incluir la lista, pero si haces esto lo que pasará es que los usuarios que utilicen clientes para leer tus feeds (rss, etc.) no podrán ver las imágenes de tu página, también está bajo tu responsabilidad el seguir añadiendo más webs amigas si hiciera falta. Para ponértelo más fácil como puedes ver ya he incluido los lectores de feeds más importantes, si sabes de alguno más envíamelo para que pueda añadirlo a la lista.
Ahora llegamos a que hacer cuando las condiciones se cumplan, es decir que el servidor haya recibido una petición por uno de los ficheros filtrados y el origen de la petición no sea desde nuestra web ni ninguna de las webs amigas.
RewriteRule (.*) http://www.otro_servidor.com/imagen_alt.jpg [NC,L]
La acción a tomar en este caso es mostrar una imagen alternativa hospedada en otro servidor, deberás cambiar esta línea apropiadamente. Ahora cada vez que la página con el enlace robado realice su petición ya sea por una imagen u otro de los fichero filtrados, este recibirá solamente la imagen alternativa.
IMPORTANTE: En caso de que la imagen alternativa se encuentre en el mismo servidor que tu web deberás cambiar la extensión de la imagen de jpg a jpe, sino la operación fallará por completo. También es recomendable que la imagen se hospede en otro servidor, existen varios gratuitos tipo Flickr, de esta manera tu ancho de banda no se verá afectado
Como bloquear completamente el Hotlinking:
La instrucción:
RewriteRule (.*) http://www.otro_servidor.com/imagen_alt.jpg [NC,L]
Puede ser reemplazada por:
RewriteRule (.*) - [F]
Con este nuevo final lo que hacemos es bloquear el acceso ilícito a los ficheros filtrados sin ningún tipo de acción posterior, esta opción es para mí la menos recomendable ya que aunque el ancho de banda no se verá afectado el servidor seguirá recibiendo peticiones hasta que el individuo decida hacer los cambios pertinentes.
Como obtener ventaja del Hotlinking:
Para poder obtener algún beneficio del robo hemos de razonar las cosas y no dejarnos llevar por nuestra ira, si la imagen alternativa que decidas mostrar es alguna tontería grosera seguramente acabarás con las manos vacías. Una opción más diplomática como se muestra en los ejemplos es crear una imagen explicando las circunstancias y como solucionarlo, o simplemente una indicación de donde ir para acceder el contenido. Como he explicado anteriormente si optas por crear tal imagen es recomendable que esta se hospede en algún servidor gratuito con lo que los efectos negativos hacia tu ancho de banda serán casi inexistentes.


Para terminar, aquí tenéis este enlace donde podréis chequear si vuestras imágenes pueden ser robadas a través de Hotlinking, podéis comprobarlo con cualquier imagen de mi página, es importante que cada vez que hagáis una prueba actualicéis la cache de vuestro navegador un par deves (Ctrl+F5) para poder ver correctamente los cambios efectuados. Esto es todo.

vía Feed RSS
por Email






15 Respuestas
31 Octubre 2007 - 08:29
Monstruo!!! Un post genial colega! Esta tarde si me da tiempo lo pongo en practica. No me preocupan tanto las imágenes del blog como las de la galería de imágenes (que estas si que pesan y pueden consumir bastante ancho de banda) aunque para estas ya añadí marca de agua por lo mismo. Pero esta solución me parece genial.
Venga Perraco, nos leemos…
31 Octubre 2007 - 11:17
Hombre kosako, menos mal que escribiste algo en tu blog, y de lo que a mi me gusta :), lo del agujero negro es muy interesante.
Aprecio que te gustara este artículo, si impolementas la solución y le ves algún fallo ya me lo dirás.
31 Octubre 2007 - 12:09
Kosako se me olvidó algo, es sobre lo que dices de que no te importan tanto las imágnes de tu página principal. Cojamos como ejemplo la imagen de tu articulo sobre el agujero negro, esta es de sólo 16Kb, y pongamos que la web intrusa recibe 100 visitas diarias y que por la razón que sea durante un més siempre tiene esa imagen en primera página:
(16Kb * 100visitas) * 30dias = 48000 (48 Megas!!!) de ancho de banda robada por UNA sola web, si son 7 imagínate entonces. (… lo estoy calculando bien esto?)
31 Octubre 2007 - 13:00
48 Megas con 875kb jejeje
No es que no me importe el ancho de banda de las imagenes del blog, pero seria más grave que utilizaran alguna foto de la galeria de imagenes, alguna pesa 2 megas que por 100 visitas * 30 dias… me quedo sin ancho de banda!!!!!
Ya lo he implementado y parece funcionar todo ok.
Bueno “PERRACO” (para que no edites jeje) ta luego.
31 Octubre 2007 - 13:05
A bueno, acuerdate de usar el enlace que doy para testear que estás protegido, y que cada vez que vez que saltes de tu página a la del test actualices la cache con F5 para ver el cambio. Saludos.
31 Octubre 2007 - 18:51
ejeje, ahuevo… así se hace… Pregunto si existira una forma de poner la misma foto, pero que sea vea el mensaje, mas PRO no? no verdad? se vale soñar… De todos modos, estoy pensando en hacer lo mismo que tu… No se que tanto se cuelguen de mis fotos. no me sale…
31 Octubre 2007 - 18:54
he, como que a todos nos gusta WIndows y FireFox. Por cierto están super tu anti spam, “nalgas”.
31 Octubre 2007 - 19:04
Jordi, creo que sí se podría hacer lo que dices, en vez de direccionar a una imagen alternativa lo harías hacia un fichero PHP que se encargara de ponerle con un poco de ayuda de librería GD una watermark a la imagen original, aunque no estoy muy seguro ahora que lo pienso por el bloque de código que inserta Wordpress en el fichero htaccess creo que fuerza a que se cargue el Index.php con lo que nuestra redirección a nuestro PHP quizá no funcionaria. Habría que investigar pero bueno, a mí esto me funciona perfecto, estoy pensando en crear un modo de detectar las página que hagan Hotlinking ya que si hospedara la imagen alternativa en mi servidor podría ver que página ha cargado la foto aunque sea sólo una vez, pero lo dejo para más adelante.
7 Noviembre 2007 - 07:22
Me estaba yo preguntando…
Habrá alguna manera de seguir el rastro de la imagen Anti-hotlink????
Supongo que la solución para poder hacer eso seria tener control de las estadisticas del server donde alojamos la imagen para ver desde donde enlazan… no lo se… habria alguna manera de rastrearlo desde las peticiones de nuestro server??? A ver si te ingenias algo para que el .htaccess guarde un log de a quien envia la imagen hombre!!!
7 Noviembre 2007 - 11:17
Sí también tengo esto en la cabeza, encontrar algún modo de detectar la fuente, si no fuera por la modificación que hace wordpress en el htaccess no sería muy difícil detectarlo, pero para esto imagen debería mantenerse en el mismo servidor.
14 Noviembre 2007 - 06:55
muy bien, pero como se haria al reves? es decir yo solo quiero bloquear un dominio, no todos menos x.
Gracias.
14 Noviembre 2007 - 12:33
Hola Manolo, he recibido algunos correos preguntandome lo mismo asi que acabo de publicar un nuevo artículo que encotrarás en la sección de tutoriales sobre como hacer lo que pides.
19 Noviembre 2007 - 19:41
Me encanta tu tutorial, sigue así!!!
19 Noviembre 2007 - 21:27
Disparos muchas gracias por tu comentario, siempre es de agredecer este tipo de apoyo a Perraco. Saludos.
26 Noviembre 2007 - 07:06
[…] Perraco.com hemos encontrado una guía muy interesante para acabar con el hotlinking, que esperamos que sea de […]
Deja tu comentario