Tutoriales

Cómo evitar el HotLinking con .htaccess y PHP

hotlinking

Antes de empezar, es lógico que debamos explicar en qué consiste el Hotlinking, pues no es algo difícil de entender pero si has llegado hasta éste artículo buscando en Google dicha palabra, considero que antes de comenzar, sea necesario aclarar conceptos.

El término Hotlinking o Hot-linking es un término bastante empleado en Internet que nos idica que alguien está usando un enlace a una imagen que se encuentra archivada en otro servidor web en lugar de guardar una copia de dicha imagen en su servidor. Por ejemplo: una web “A” enlaza una imagen a otro servidor “B” con la dirección “http://www.servidorB.com/imagen.jpg” (Para éste caso, el servidor web A estaría visualizando una imagen que se encuentra en el servidor B)

En eso consiste el Hotlinking, y a decir verdad, es algo que perjudica no solo a al servidor que se le “roba” la imagen, sino que si dicho servidor se viera afectado por una caída, también podría afectar al servidor para el cual se visualiza dicha imagen. Suponiendo que hayamos contratado un servidor web y que a éste le hayan asignado un determinado límite de ancho de banda, dicho límite podría ser alcanzado con mayor velocidad puesto que la misma imagen se estaría visualizando en ambos servidores.

El Hotlinking es una práctica habitual, especialmente por aquellos que se dedican a robar contenido web.

Protegiendo lo que está en nuestro servidor…

La mejor forma de proteger las imágenes alojadas en nuestro servidor es empleando el uso de los archivos que emplea Apache, denominados .htaccess. Gracias a dichos archivos, los cuales pueden ubicarse dentro de cualquier carpeta del servidor y con unas reglas determinadas podremos hacer algunos cambios para que en lugar de mostrar la imagen a la cual hacen hotlink, se vea otra. Muchas webs usan éstos archivos para reemplazar las imágenes enlazadas por otras ofensivas o con un mensaje publicitario del sitio original. Esto conlleva a disuadir a los propietarios de sitios web que realizan estas prácticas.

Les voy a poner un ejemplo más claro, si entras en cualquiera de nuestros artículos, incluyendo éste, podrás observar que las imágenes que contienen no llevan marcas de agua, son imágenes limpias, sin embargo, si compartes en Facebook, Google+, Twitter o cualquier otra red social o página web, podrás comprobar como en dichas webs se les aplica una marca de agua (nuestro logo y un texto). ¡Podría poner cualquier cosa!, pero desde mi punto de vista, y como procuro que mis imágenes no sobrepasen los 60kb, pues mejor y más estético tal y como está.

Pongamos manos a la obra…

Para evitar el hotlinking o al menos llevarnos en parte el reconocimiento de que cualquier imagen alojada en nuestro servidor  está siendo cargada en otro sitio, y que el usuario pueda tenerlo más claro, podemos añadir un código en lenguaje PHP para que aplique o añada una marca de agua con nuestro dominio o logotipo cuando las imágenes sean cargadas desde un servidor que no sea el nuestro.

Para ello vamos a necesitar que nuestro servidor tenga disponible Apace 2, GD Library y PHP. A decir verdad, hoy día eso lo tenemos disponible desde cualquier proveedor de hosting.

Antes de nada, debemos disponer de un logotipo en formato PNG y con fondo transparente, así quedará mejor integrado en la imagen principal. Si ya tienes el fichero del logo (logo.png), debemos subirlo vía FTP o desde el propio servidor al directorio (/public_html/), en el cual deberá permanecer. De igual forma, debemos crear un fichero en la misma carpeta que podremos llamar nohotlink.php, y copiamos el siguiente código dentro del mismo.

/* http://www.verasoul.com */
<?php
$src = $_GET['src'];
header('Content-type: image/jpeg');
$watermark = imagecreatefrompng('logo.png');
$watermark_width = imagesx($watermark);
$watermark_height = imagesy($watermark);
$image = imagecreatetruecolor($watermark_width, $watermark_height);
if(eregi('.gif',$src)) {
$image = imagecreatefromgif($src);
}
elseif(eregi('.jpeg',$src)||eregi('.jpg',$src)) {
$image = imagecreatefromjpeg($src);
}
elseif(eregi('.png',$src)) {
$image = imagecreatefrompng($src);
}
else {
exit("La imagen no es JPG, GIF o PNG");
}
$size = getimagesize($src);
$dest_x = $size[0] - $watermark_width - 0;
$dest_y = $size[1] - $watermark_height - 0;
imagecolortransparent($watermark,imagecolorat($watermark,0,0));
imagecopyresampled($image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height, $watermark_width, $watermark_height);
imagejpeg($image);
imagedestroy($image);
imagedestroy($watermark);

 

Una vez tengamos ambos archivos en el directorio /public_html/ de nuestro servidor, es hora de modificar, añadir o crear, dependiendo de si tenemos el archivo .htaccess ya creado y con líneas de reglas en el. ¡Tengan cuidado! .htaccess es un archivo de configuración, así que lo recomendable es hacer una copia de seguridad del mismo antes de modificarlo. Si por el contrario debes crearlo (cosa que pongo en duda), simplemente deberás añadir lo siguiente:

Options +FollowSymLinks
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} .*jpg$ [NC]
RewriteCond %{HTTP_REFERER} !verasoul.com [NC]
RewriteRule (.*) nohotlink.php?src=$1

Recuerda que en ambos cuadros de código, deberás reemplazar las líneas que he marcado por aquellos nombres que hayas preferido, es decir, “logo.png”, “verasoul.com” y “nohotlink.php”.

Lo bueno de éste método es que no será necesario emplear plugins y sirve para cualquier plataforma web, según nos detalla vichaunter en su blog.

Por otro lado, si no tienes una web desarrollada bajo la plataforma WordPress, y no deseas llevar a cabo semejante hazaña, podrías hacer uso de alguno de los siguientes plugins que te nombramos.

Image Watermark
Image Watermark
Developer: dFactory
Price: Free
Easy Watermark
Easy Watermark
Price: Free
watermark
watermark
Developer: Alexis Blondin
Price: Free