evitar-hotlinking-web-php-htaccess

Como evitar el hotlinking en cualquier página web con .htaccess y php

Desde los tiempos más remotos la copia o plagio es algo que se viene dando hasta nuestros días. Una evolución de copiar contenido es aprovecharse de los recursos de otros para así no tener que invertir nosotros en esos recursos, en este caso hablamos de hotlinking que vamos a ver qué es y como evitarlo poniendo una marca de agua a nuestras imágenes cuando se carguen desde fuera de nuestro sitio.

No hay nada de malo en intentar proteger lo que es nuestro, por eso vamos a ver como defendernos ante este método de robo de ancho de banda. El hotlinking es simplemente incluir contenidos de otra web como pueden ser imágenes o vídeos directamente de la web de un tercero, es decir, que toda la carga y ancho de banda de ese contenido recaiga sobre quien lo hospeda y nosotros nos llevemos el mérito de tener ese contenido publicado. Esto es lo que se hace normalmente en sitios como youtube, facebook, etc, pero sus posibilidades son diferentes a las de los usuarios normales.

Para evitar el hotlinking, o al menos para llevarnos el reconocimiento de que esa imágen está siendo cargada desde nuestro sitio, y que el usuario pueda tenerlo claro, podemos poner un pequeño script en php que incluya una marca de agua con nuestro dominio o logo únicamente cuando las imágenes se cargan desde un sitio que no es el nuestro.

Para esto vamos a necesitar varias cosas y en este tutorial lo haremos sobre apache:

  • Apache 2
  • GD Library
  • PhP

Si tenemos estas tres cosas podemos proceder con el tuto (prácticamente en todos los hostings está, si no es el caso puedes solicitarlo a quien te presta los servicios de internet ya que el gd es una instalación simple).

Léete también  5 comandos útiles que puede que desconozcas en MAC

Como protegernos contra el hotlinking con php y apache (htaccess)

Lo primero que haremos será crear un logotipo en formato png, un logo que queramos introducir en nuestras imágenes y que deberíamos adaptar al tamaño medio de estas, ya que si son muy grandes y el logotipo es muy pequeño no se va a ver. Podeis usar un png-24 con transparencia para que quede mejor integrado con la imágen principal.

Una vez tengamos el logo le damos nombre por ejemplo logo.png y lo dejaremos en la raíz de nuestro sitio. Ahora nos crearemos un archivo php, por ejemplo htlink.php en la raíz de nuestro sitio también y le pondremos el siguiente contenido dentro

<?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);

Por último tendremos que modificar el archivo .htaccess, y dependiendo de nuestra página y de si le estamos dando uso tendremos que poner estas reglas en una parte u otra. Principalmente habrá dos formas, la primera en caso de que no tengamos nada en el .htaccess tendremos que poner el siguiente contenido:

Options +FollowSymLinks
RewriteEngine on

RewriteBase /

RewriteCond %{REQUEST_FILENAME} .*jpg$ [NC]
RewriteCond %{HTTP_REFERER} !vichaunter.org [NC]
RewriteRule (.*) htlink.php?src=$1

por supuesto cambiamos vichaunter.org por la dirección de nuestra página. El segundo método es en caso de que tengamos algún rewrite ya creado, como por ejemplo el de wordpress. Entonces deberíamos colocarlo justo después del RewriteBase / únicamente esto:

RewriteCond %{REQUEST_FILENAME} .*jpg$ [NC]
RewriteCond %{HTTP_REFERER} !vichaunter.org [NC]
RewriteRule (.*) htlink.php?src=$1

Si queremos podemos cambiar la extensión jpg por cualquiera en la que queramos poner marcas de agua.

Léete también  ¿Qué es el tiempo de protección y para qué sirve?

Una vez hecho esto si accedemos desde cualquier parte que no sea nuestra página a una imágen directamente (o la incluímos en una web de otro dominio) veremos como abajo a la derecha aparecerá nuestro logo o marca de agua para decir a los usuarios de donde están sacando la imágen.

Lo bueno de este método es que da igual qué plataforma utilizes, wordpress, joomla, drupal, etc ya que al ser independiente es compatible con cualquier página.

¿Lo has usado en tu web?


AYUDANOS a poder seguir dando respuestas. Te podemos echar una mano y tú también a nosotros, símplemente dale a me gusta.