Permitir hotlinking añadiendo a la imagen tu dominio
20 Julio, 2006 por CarlosSi 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).
Julio 31st, 2006 at 9:57 pm
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…
Agosto 1st, 2006 at 2:43 am
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 ;)
Agosto 1st, 2006 at 3:24 am
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?
Agosto 1st, 2006 at 6:31 am
Andaba buscando algo así, mañana con las luces del alba lo pruebo a ver.
Gracias!
Agosto 1st, 2006 at 12:36 pm
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.
Agosto 1st, 2006 at 4:12 pm
$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.
Agosto 1st, 2006 at 4:13 pm
Donde digo “para añadir el borde” quiero decir “para añadir el borde, el texto y demás efectos que quieras”.
Agosto 1st, 2006 at 4:37 pm
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.
Agosto 1st, 2006 at 4:45 pm
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.
Agosto 1st, 2006 at 5:21 pm
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?
Agosto 1st, 2006 at 8:51 pm
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.
Agosto 2nd, 2006 at 12:03 am
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
Agosto 2nd, 2006 at 1:44 pm
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)
Agosto 2nd, 2006 at 11:54 pm
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…
Agosto 3rd, 2006 at 1:36 pm
Podeis daros los dos por copiados, gracias ;-)
Agosto 3rd, 2006 at 1:38 pm
de nada, son 10K.
Agosto 8th, 2006 at 11:30 pm
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…
Septiembre 19th, 2007 at 3:58 pm
[...] 5º Mediante codigo en el .htaccess para no permitir el Hotlinking , variante introduciendo el nombre de tu dominio. [...]
Febrero 16th, 2008 at 2:36 am
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
Febrero 18th, 2008 at 2:38 pm
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.
Junio 23rd, 2009 at 2:15 pm
¿Alguien conoce el Cloud Hosting de alikais.com?
Septiembre 16th, 2009 at 5:58 am
muy bueno para que no nos roben nuestras imagenes.