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).

20 respuestas to “Permitir hotlinking añadiendo a la imagen tu dominio”

  1. meneame.net Says:

    Permitir hotlinking añadiendo a la imagen tu dominio…

    Si tiene suficiente ancho de banda pero no quieres que la gente te haga hotlinking sin tan ni siquiera mencionarte puedes usar este sencillo script para añadir un border a la imagen que contenga el texto que tu quieras (por ejemplo el nombre de tu dom…

  2. Javier Pérez Says:

    Un artículo genial! :) Al verlo, pensé que se trataba de usar la librería GD, y ya iba a ignorarlo… :-P Pero es simplemente con el comando convert, alque sin duda voy a investigar más a fondo.

    Gracias por el artículo ;)

  3. aNieto2k Says:

    Pero esto no es un problema para los RSS?? Supongo que no es una gran molestia añadir eso a una imagen, pero si no quieres ponerlo ¿por el RSS te fastidias?

  4. javi Says:

    Andaba buscando algo así, mañana con las luces del alba lo pruebo a ver.
    Gracias!

  5. Carlos Says:

    Hombre, no había pensado en los RSS. Lo mejor sería poner las imágenes sin width ni height y así la única diferencia es que salga el borde.

    Si alguien lo usa ya me contaréis que tal.

  6. Víctor Fernández Says:

    $tabla_foto = explode(”/”,$foto);
    $nombre_fichero = $tabla_foto[count($tabla_foto)-1];
    $imagen_cache = $path_cache . $nombre_fichero;

    ¿No sería más fácil usar simplemente basename()? :

    $imagen_cache = $path_cache . basename($foto);

    Además, este script requiere que esté instalado el ImageMagick, lo cual no es tan probable como que estén instaladas las GD. Por eso sería mejor usar las GD para añadir el borde, creo yo. Además, así no necesitas usar system(), que quieras que no es más peligroso que llamar a unas cuantas funciones.

    Por lo demás, la idea es buena. Saludos.

  7. Víctor Fernández Says:

    Donde digo “para añadir el borde” quiero decir “para añadir el borde, el texto y demás efectos que quieras”.

  8. Carlos Says:

    Pues tienes razón Víctor en las dos cosas.
    1. No conocía esa función :P, ya lo he corregido.
    2. Siempre mejor no usar system pero ahora mismo Imagemagick es mejor que GD aunque para lo que se usa seguramente GD será más que suficiente.

  9. sorprendido Says:

    Hay que ver lo egoista que es la gente, todo esto va a acabar con el espíritu de internet, si te hacen hotlinking, pues enhorabuena, estás contribuyendo.

  10. Carlos Says:

    Sorprendido tu crees que poner una watermark en la imagen y seguir pagando la transferencia de las imágenes es ser egoista?

    Crees que lo que hacen los de mallorcatuning (no son los únicos, es una ejemplo) está bien?

  11. aNieto2k Says:

    Una solución para los RSS sería el añadir una línea más al htaccess y controlar el user agent.
    http://en.wikipedia.org/wiki/User_agent

    Un saludo.

  12. Tenue Says:

    Yo lo he usado en una de mis webs, y me va bien; indispensable para combatir la gran magnitud de copiones de la red. :-D

  13. Carlos Says:

    Los lectores de RSS no tienen un user agent distinto cada uno? O pone algo en común en todos ellos? (por ejemplo noseque/RSS)

  14. Ruido blanco Says:

    Ladrones de ancho de banda…

    Sabiendo o sin saberlo mucha gente enlaza las imágenes en páginas web (en foros sobretodo) directamente de los servidores originales, sin copiarlas en sus propios servidores y muchas veces sin acreditar su procedencia. Una manera de evitarlo es restr…

  15. cocososo Says:

    Podeis daros los dos por copiados, gracias ;-)

  16. Carlos Says:

    de nada, son 10K.

  17. SigT Says:

    Siglink.7…

    Y una vez más, el listado de enlaces que nunca se sabe que día de la semana aparecerá™.

    Web 2.0.
    La definición de Web 2.0 dada por la Wikipedia, sí, esa misma definición que después de ser usada por miles de personas finalmente fue regis…

  18. » Protegete - SEO Profesional Says:

    […] 5º Mediante codigo en el .htaccess para no permitir el Hotlinking , variante introduciendo el nombre de tu dominio. […]

  19. Lorenzo Lamas Says:

    Escribeme un mail.
    Yo desde Firefox me bajo tus fotos (www.buscatuning.com) sin problemas. La cabecera y el Golf4 Eurotuner por ejemplo.

    un saludo

  20. Carlos Says:

    Lorenzo, aquí no hablamos de ningún sistema para no permitir que la gente se bajen las fotos (cosa bastante complicada o simplemente imposible) sino de que no hagan hotlinking.

Deja un comentario