Volver a la portada del blog

Permitir hotlinking añadiendo a la imagen tu dominio

20 Julio, 2006 por Carlos

Si tienes fotos en tu página y no has puesto nada para evitar el hotlinking antes o después alguien usará una de tus imágenes (sobretodo en foros y blogs). Lo más fácil es impedir que esto suceda con unas simples lineas en el .htaccess. En mi caso he usado esto en el directorio de las imágenes:

[code]
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?tudominio.com(/)?.*$ [NC]
RewriteRule (.*) /mosquear.php [NC]
[/code]

En internet existen bastantes páginas para ayudarte en este asunto, las he usado han sido:

Con esto tenemos que en lugar de devolver la imagen cuando no se piden desde nuestro dominio se devuelve mosquear.php (se llama así por que pone una mosca). Este archivo se encarga de ponerle el borde y el texto usando ImageMagick:

[php]
< ?php
// Devuelve una foto con una mosca
// Los paths son absolutos, para saber que path es hasta tu directorio web puedes usar la variable $DOCUMENT_ROOT

// Directorio cache de imágenes. Hay de tener privilegios de escritura y lectura para el usuario del servidor web
$path_cache = "/path/to/cache_de_imagenes/";

if($_SERVER['REQUEST_URI'] != "")
$foto = $_SERVER['REQUEST_URI'];
else
$foto = "/path/to/foto_por_defecto";

$url_foto = "http://www.dominio.com" . $foto;
$foto = "/path_to_carpeta_web/" . $foto;

// Obtenemos el nombre de la imagen
$nombre_fichero = basename($foto);
$imagen_cache = $path_cache . $nombre_fichero;

if(is_file($foto))
{
// Miramos si la foto ya está en la cache
if(!is_file($imagen_cache))
{
// Copiamos la foto a la cache
copy($foto, $imagen_cache);

// Ahora le ponemos la mosca
$comando = "convert -border 0x16 -bordercolor \"#F7C700\" -weight bold -append -draw \"gravity South text 0,0 'more pics in www.tudominio.com'\" -append -draw \"gravity North text 0,0 '+ imágenes en www.tudominio.com'\" '$imagen_cache' '$imagen_cache'";
//echo "Comando: $comando
“;
system($comando, $retval);
}

// Miramos el tipo de la imagen
list($width, $height, $type, $attr) = getimagesize($imagen_cache);
$type_mime = image_type_to_mime_type($type);
if($type_mime == “”)
$type_mime = “image/jpeg”;
header(“Content-Type: $type_mime”);

if(is_file($imagen_cache))
{
readfile($imagen_cache);
//echo “

Incluimos $imagen_cache”;
}
}
else
{
echo “

Foto no encontrada

“;
echo “

La foto ” . strip_tags($url_foto) . ” no fue encontrada

“;
}
?>
[/php]

Hay que crear un directorio de cache para que sólo la primera vez que nos pidan una imagen se pongan los bordes. El script también supone que el binario convert de imagemagick está en el path y que puedes usar la función system de php.

Y ya está, si nos sobra ancho de banda pero no queremos que nos lo gasten por la cara esto es una buena solución de compromiso. Esto mismo lo he usado en www.buscatuning.com, el resultado final quedaría algo así (estos además de hacer hotlinking ponen toda la noticia entera y no sólo a nosotros, parece que les gusta mucho www.motorpasion.com)

Actualización

En ruido blanco han hecho un script que usa la librería GD (y así no tener que usar ni system ni imagemagick).


Fatal error: Call to undefined function menea() in /data/virtual/neuroticweb.com/blog/wp-content/themes/neurotic/single.php on line 39