Revisando el tráfico de mi blog descubrí algunos gusanos que copiaron varios de mis artículos (notablemente mi artículo dedicado a OpenVPN) sin siquiera dejar un triste enlace, referencia al artículo original, o nombre del autor, violando claramente la licencia Creative Commons Attribution-ShareAlike 3.0 Unported con la que se publica el contenido de linuxito.com:

    "Reconocimiento — Debe reconocer adecuadamente la autoría, proporcionar un enlace a la licencia e indicar si se han realizado cambios. Puede hacerlo de cualquier manera razonable, pero no de una manera que sugiera que tiene el apoyo del licenciador o lo recibe por el uso que hace."

En este artículo voy a explicar cómo impedir el hotlink de imágenes de forma correcta utilizando archivos .htaccess.

Este gusano en particular copio mi artículo al pie de la letra dejando que las imágenes sean cargadas desde mi servidor (no se tomó el trabajo de descargar las imágenes y hostearlas en su propio servidor). Este tipo de abuso se denomina comúnmente hotlinking. El principal problema que presenta el hotlinking es el robo de ancho de banda, ya que al cargar la imagen hosteada en nuestro servidor desde otro sitio, se consume nuestro ancho de banda. Si el hotlinking es masivo, es posible que nuestro sitio quede offline por exceder el ancho de banda disponible por mes.

Utilizando archivos de configuración distribuida .htaccess es posible configurar el servidor Web Apache para evitar el hotlinking.

La solución que implementa la mayoría consiste en bloquear el hotlinking de imágenes desde todos los dominios excepto el propio, Google, feedly y alguno más. Esta solución es incorrecta ya que presenta muchos problemas. La carga de imágenes fallará desde todo tipo de lectores RSS y servicios se búsqueda de imágenes, fallará al reciclar pestañas o al acceder desde referers (si está mal implementado), fallará cuando se envían artículos por mail, etc.

La solución adecuada consiste en utilizar una lista negra (blacklist) de dominios que nos roban ancho de banda. Es una tarea laboriosa ya que implica el monitoreo periódico de hotlinking, pero es la que se debe implementar para evitar problemas con los usuarios de nuestro sitio.

A modo de ejemplo, supongamos que se está haciendo hotlinking de imágenes desde el dominio "chantapufi.com" y deseamos evitarlo. Editar (o crear en caso de que no exista) el archivo de configuración distribuida .htaccess en el directorio base de nuestro sitio y agregar el siguiente conjunto de reglas:

## ENABLE mod_rewrite
RewriteEngine on

## AVOID HOTLINK from chantapufi.com
RewriteCond %{HTTP_REFERER} ^http://chantapufi.com [NC,OR]
RewriteCond %{HTTP_REFERER} ^https://chantapufi.com [NC,OR]
RewriteCond %{HTTP_REFERER} ^http://www.chantapufi.com [NC,OR]
RewriteCond %{HTTP_REFERER} ^https://www.chantapufi.com [NC]
RewriteRule .*\.(jpg|jpeg|gif|png|bmp)$ http://www.linuxito.com/images/nohotlink.jpg [R,NC,L]

Luego crear una imagen para reemplazar. Hay quienes prefieren utilizar imágenes de mujeres desnudas u otro tipo de contenido que pueda llegar a ser ofensivo. Yo prefiero aprovechar el espacio para publicitar mi blog. Para ello utilizo la siguiente imagen:

De esta forma, todas las imágenes alojadas en nuestro servidor que se intenten descargar desde el dominio "*chantapufi.com*", serán reemplazadas por el archivo www.linuxito.com/images/nohotlink.jpg.

Para cada nuevo dominio que se desee agregar a la lista negra es necesario incluir las siguientes reglas debajo de la sentencia RewriteRule anterior, reemplazando "[dominio.com]" por el dominio deseado (por ejemplo "chantapufi2.com"):

## AVOID HOTLINK from [dominio.com]
RewriteCond %{HTTP_REFERER} ^http://[dominio.com] [NC,OR]
RewriteCond %{HTTP_REFERER} ^https://[dominio.com] [NC,OR]
RewriteCond %{HTTP_REFERER} ^http://www.[dominio.com] [NC,OR]
RewriteCond %{HTTP_REFERER} ^https://www.[dominio.com] [NC]
RewriteRule .*\.(jpg|jpeg|gif|png|bmp)$ http://www.linuxito.com/images/nohotlink.jpg [R,NC,L]

Debe quedar como se observa a continuación:

## ENABLE mod_rewrite
RewriteEngine on

## AVOID HOTLINK from chantapufi.com
RewriteCond %{HTTP_REFERER} ^http://chantapufi.com [NC,OR]
RewriteCond %{HTTP_REFERER} ^https://chantapufi.com [NC,OR]
RewriteCond %{HTTP_REFERER} ^http://www.chantapufi.com [NC,OR]
RewriteCond %{HTTP_REFERER} ^https://www.chantapufi.com [NC]
RewriteRule .*\.(jpg|jpeg|gif|png|bmp)$ http://www.linuxito.com/images/nohotlink.jpg [R,NC,L]

## AVOID HOTLINK from [dominio.com]
RewriteCond %{HTTP_REFERER} ^http://[dominio.com] [NC,OR]
RewriteCond %{HTTP_REFERER} ^https://[dominio.com] [NC,OR]
RewriteCond %{HTTP_REFERER} ^http://www.[dominio.com] [NC,OR]
RewriteCond %{HTTP_REFERER} ^https://www.[dominio.com] [NC]
RewriteRule .*\.(jpg|jpeg|gif|png|bmp)$ http://www.linuxito.com/images/nohotlink.jpg [R,NC,L]

Para crear reglas de reescritura personalizadas, acceder a la documentación oficial de Apache: Apache Module mod_rewrite.

Espero que les sirva para evitar el robo de ancho de banda.


Tal vez pueda interesarte


Compartí este artículo