Este artículo explica cómo implementar una lista negra de dominios, provenientes como referers en las cabeceras de las peticiones HTTP, para los cuales no se servirán imágenes y así evitar el maldito hotlinking.

¿Por qué usar una blacklist en vez de una lista blanca (es decir, permitir la carga de imágenes sólo desde nuestro dominio, Google, Facebook y algún otro más)? Ya lo expliqué anteriormente en el artículo Cómo prevenir el hotlink de imágenes (en esa oportunidad expliqué cómo implementarlo en Apache). En resumen, implementar una lista blanca puede perjudicar seriamente la experiencia de navegación de nuestros usuarios (sobre todo al momento de compartir nuestros artículos en redes sociales, utilizar lectores RSS, buscar imágenes , etc.)



La mejor solución consiste entonces en detectar y bloquear manualmente a los gusanos uno por uno. Probablemente muchos piensen que esto es saña, pero el hotlinking es algo serio, más aún en esta era de cloud computing. Por ejemplo, muchos servicios en la nube como AWS facturan el servicio de acuerdo a su uso, por ende, si desde otro dominio enlazan directamente a nuestros archivos, nos estarán robando ancho de banda, ergo dinero.

Si me vas a plagiar un artículo, al menos tené la decencia de copiarte también las imágenes a tu servidor, no servirlas directamente desde el mío. Te dejo robarme contenido (mirá que bueno soy), pero no me robes ancho de banda pedazo de h*** de p***.

Supongamos (a modo de ejemplo) que quiero impedir que los siguientes dominios (pertenecientes a plagiadores de contenido) no nos roben ancho de banda:

    chorizo.com
    taringa.net
    ladri.org
    elblogdelcopiapega.blogspot.*

Sino que en lugar de servir las imágenes enlazadas, sirva una imagen fija que podamos utilizar para promocionar nuestro sitio.

Para ello, se debe utilizar la siguiente configuración en Nginx:

	# Evitar hotlink
	location = /images/nohotlink.jpg { }
	location = /images/nohotlink.png { }
	location = /images/nohotlink.gif { }

	location ~ \.(jpg|jpeg)$ {
		if ($http_referer ~* (chorizo.com|taringa.net|ladri.org|elblogdelcopiapega.blogspot)) {
			rewrite (.*) http://www.linuxito.com/images/nohotlink.jpg;
		}
	}
	location ~ \.(png|ico)$ {
		if ($http_referer ~* (chorizo.com|taringa.net|ladri.org|elblogdelcopiapega.blogspot)) {
			rewrite (.*) http://www.linuxito.com/images/nohotlink.png;
		}
	}
	location ~ \.(gif|css|js|pdf)$ {
		if ($http_referer ~* (chorizo.com|taringa.net|ladri.org|elblogdelcopiapega.blogspot)) {
			rewrite (.*) http://www.linuxito.com/images/nohotlink.gif;
		}
	}

Lógicamente, de esta forma seguimos perdiendo ancho de banda en servir la imagen de reemplazo, aunque es una oportunidad para dirigir visitantes a nuestro sitio. Si no nos interesa promocionar nuestro sitio, y simplemente queremos evitar todo robo de ancho de banda, es posible retornar directamente con el código de estado HTTP 403 (Forbidden). Para ello, utilizar la siguiente configuración (en lugar de la anterior):

	# Evitar hotlink
	location ~ \.(jpg|jpeg|png|ico|gif|css|js|pdf)$ {
		if ($http_referer ~* (chorizo.com|taringa.net|ladri.org|elblogdelcopiapega.blogspot)) {
			return 403;
		}
	}

Espero que les sea útil.


Tal vez pueda interesarte


Compartí este artículo y dejá tu comentario