Seleccionar página

Nginx: Protección Hotlink mediante reescritura

O: ¡cómo castigar a los ladrones de fotos!

Casi todos los que gestionan un sitio web con contenido editorial en Internet están familiarizados con esto: el robo de imágenes mediante hotlink.
Y preferiblemente con un texto completamente copiado que hayas investigado concienzudamente y al que hayas dedicado horas de redacción y corrección.

Este artículo se actualizó por última vez el 14 de abril de 2022.

información
Escrito por Saskia Teichmann
el 31 enero 2016
Envío de
Opinión del usuario
0 (0 vota)
Comentarios 0 (0 reseñas)
Protección de enlaces directos ∙ Proteger medios ∙ nginx
Nginx: Instrucciones - Configurar la protección hotlink

Ni siquiera hay un backlink a su propio sitio web, a menos que el ladrón de contenidos se haya limitado a copiar y pegar todo el contenido del código fuente en su sitio web. Entonces puede ocurrir que haya enlazado en algún sitio a otro de sus propios posts con la URL completa. Y este enlace sigue estando contenido en el texto. Pero primero respira hondo y lo primero es lo primero:

¿Qué es un enlace directo?

Un hotlink es, por ejemplo, la integración de una imagen mediante un enlace directo a la URL existente. Sin descargar previamente la imagen, subiéndola a su propio espacio web o servidor y enlazándola desde allí.

Los hotlinks no suelen ser malos. Al menos no si el hotlinking se ha acordado con los demás o si se trata de un servicio de carga de imágenes.
En la mayoría de los casos, sin embargo, no se trata de un servicio de carga de imágenes, sino simplemente de alguien que paga su alojamiento web cada mes y tiene un cierto límite de tráfico. Y aquí llegamos al quid de la cuestión.
Si otra persona muestra archivos multimedia en su página de inicio que están ubicados en tu servidor web, tu servidor sirve cada una de estas peticiones externas porque eso es lo que hacen los servidores. Sirven (serve, provide, serve, serve).

Ahora el ladrón de contenidos tiene una imagen gratuita en su sitio web por la que no se genera/carga tráfico en su propio servidor. Este tráfico (carga del servidor) se factura al ladrón, es decir, a usted, y cuesta recursos del servidor cada vez que un visitante navega hasta el sitio del ladrón de contenidos y la imagen se muestra en su navegador web.
En determinadas circunstancias, esto puede generar un tráfico externo increíble. Dependiendo de cuánto tráfico de visitantes tenga el ladrón de contenidos en su sitio web.
Eso no tiene gracia.

Hoy me gustaría mostrarte cómo puedes configurar tu propio servidor web NGINX para que no sirva estas peticiones externas como se espera, sino que sirva una imagen diferente a los visitantes del sitio web ladrón de contenidos.
De esta forma, podrás revertir el supuesto daño y beneficiarte de él y, si estás muy enfadado, podrás ganarle la partida al ladrón: atraiga visitantes a su propio sitio web

¡Cómo convertir NGINX en un jefe Hotlink invencible!

Este es el plan:

  • Queremos una solución integral que funcione para todos los dominios. Para que no tengas que personalizar cada configuración individual de vHost (sites-available).
  • El enlace de solicitud debe reescribirse (reescribir) y, por tanto, se sirve en su lugar una imagen específica y diferente a la del ladrón
  • Debe funcionar con Google Image Search y otros motores de búsqueda con una función de búsqueda de imágenes en lugar de prohibir el hotlinking de forma generalizada. De lo contrario, Google Image Search ya no mostrará las imágenes reales, sino sólo la imagen de intercambio.

Solución al robo de imágenes

Estas pocas líneas de código son, en última instancia, la solución al problema del robo de imágenes. Puedes averiguar cómo y dónde colocar el código en la siguiente sección.

location ~* \.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|css|rss|atom|js|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf|swf)$ {
  add_header "Access-Control-Allow-Origin" "*";
  access_log off;
  log_not_found off;
  expires max;
  valid_referers none blocked ~.google. ~.bing. ~.yahoo. ~.yandex. server_names ~($host);
    if ($invalid_referer) {
      rewrite (.*) /hotlink/eight-content-and-image-stealing.png redirect;
      }
}
#hotlink fin del bucle de redirección
location = /hotlink/acht-inhalts-und-bilderklau.png { }

¿Qué hace el código?

~ se utiliza para tener en cuenta las mayúsculas/minúsculas, mientras que ~* Se ignoran las mayúsculas y minúsculas.

NGINX comprueba la regla de ubicaciones en el orden en que se insertan las expresiones regulares. ¡Esto significa que las instrucciones de la cabecera de caché para archivos multimedia y las instrucciones para nuestra protección hotlink deben estar en el mismo bloque!

location = /hotlink/octavo-contenido-y-robo-de-imagen.png { } para que la nueva solicitud de la imagen de sustitución no provoque un bucle de reenvío infinito:
El sitio ladrón de imágenes envía una solicitud de imagenA → nuestro NGINX redirige la solicitud de imagen de sustitución → el sitio ladrón de imágenes envía una solicitud de imagen de sustitución → nuestro NGINX redirige la solicitud de imagen de sustitución, pero no sirve → y así sucesivamente....

Imagen de reserva para el robo de imágenes

1TP4Host es una variable que hace que esta instrucción sea utilizable globalmente y funcione bajo todos los dominios vHost del servidor web. La siguiente URL es válida para cada dominio: http://$host/hotlink/achtung-inhalts-und-bilderklau.png

Sólo el directorio /enlace y un archivo de imagen con el nombre attention-content-and-image-stealing.png debe almacenarse en este directorio. Si lo desea, también puede cambiar el nombre del archivo y del directorio. Sólo tienes que adaptar el código en consecuencia.

Cómo integrar la regla de localización

Así es como se procede para dotar a su servidor web NGINX de esta protección especial hotlink contra el robo de imágenes.

Tiempo total: 30 minutos

Preparativos: Crear y cargar el gráfico de intercambio

En primer lugar, cree un gráfico que los visitantes del sitio web del ladrón deban ver y cárguelo en el directorio deseado de su servidor web. Anote la URL del gráfico.

Ubicaciones de NGINX Webserser Configuración personalizada

En su servidor, navegue hasta el directorio /etc/nginx/common/ y busque la configuración de ubicaciones incluida en el bloque de servidor de su vhost, que contiene reglas para la ubicación definida en el código anterior. Por regla general, ya existirá un bloque de reglas para la ubicación especificada. Si no es así, simplemente inserte el código anterior como un nuevo bloque de reglas en el archivo correcto.
Si el bloque ya existe, inserte sólo las reglas anteriores sin la envoltura de ubicaciones.

Guardar y recargar la configuración del servidor web NGINX

A continuación, guarde el archivo de configuración con el bloque de ubicaciones extendidas en el servidor y pruebe la nueva configuración primero a través del terminal SSH con nginx -t
Si la prueba se ejecuta sin problemas, reinicie su NGINX con el comando service nginx restart.

Pruebe su protección contra hotlinks

Aquí he escrito una herramienta que puede utilizar para probar su configuración de protección hotlink. Introduzca la URL directa de un gráfico en su servidor nginx en el campo de entrada. Idealmente, la imagen de reemplazo debería aparecer en el campo de salida de abajo. Si aparece la imagen de la URL introducida, debe comprobar de nuevo su protección hotlink.

Si desea realizar la prueba varias veces seguidas para la misma URL de imagen, deberá borrar la memoria caché del navegador después de cada prueba y volver a cargar esta página.

Comprobar URL de la imagen

¿Aún tiene preguntas? Entonces no dude en utilizar la función de comentarios que aparece debajo de este artículo.

Por favor, comparta este artículo en su página de Facebook, Twitter, Google+ u otra plataforma social de su elección. A continuación encontrará los botones para compartir. Compartir es rápido y fácil y yo estaría encantado.

<span class="castledown-font">Saskia Teichmann</span>

Saskia Teichmann

Desarrollador web WordPress full stack de Alemania al que le gusta crear sitios web bonitos y proyectos web sofisticados.

En su tiempo libre, Saskia disfruta haciendo senderismo con su familia por la sierra de Tramuntana, en Mallorca, paseando por los jardines de Herrenhausen, en Hannover, o nadando en el mar.

Enviar una solicitud de proyectoServir café

9 Comentarios

  1. Kuwe

    ¡Super ingenioso el post! La idea es realmente sencilla 🙂 Me parece genial. Desgraciadamente, nunca he pensado con tanta antelación, ya que esto nunca ha sido un problema para mí (podría ser el contenido ;)).
    También me sorprende mucho leer algo sobre configuración de Nginx en una página de frontend / diseño. Además, WordPress está más en sintonía con Apache, aunque algunos plugins ahora también apoyan Nginx más y generar configuraciones para él en lugar de simplemente crear un htaccess Apache 😉.

    Btw. ¡Yo también creo que tus diseños son geniales! *ambos pulgares arriba* 🙂 .

    Responder
    • Saskia Lund

      Muchas gracias por sus comentarios.

      Para ser honesto, creo que nginx es el "mejor" y más rápido servidor web en combinación con WordPress. Basta con googlear un poco sobre el tema 🙂 .

      Al comentario del front-end:
      Soy un desarrollador frontend, pero como me especializo en WordPress, no hay manera de evitar php en mis ojos, y en algún momento no voy a ser capaz de evitar los problemas relacionados con el servidor.

      Muchas gracias de nuevo.

      Responder
  2. Frank

    Muy buen artículo. ¿Dónde exactamente se debe colocar el código? ¿En el htaccess en la raíz del sitio web? ¿O en un htaccess separado en el directorio de imágenes? Muchas gracias.

    Responder
    • Saskia Lund

      ¡Hola Frank!

      Si está utilizando un servidor web nginx, el .htaccess no se utiliza; en otras palabras, un servidor web nginx no puede hacer nada con los archivos .htaccess.

      Los archivos .htaccess se utilizan junto con los servidores web Apache.

      El código anterior se suele utilizar globalmente en el archivo locations.conf para un servidor web nginx en el directorio del servidor /etc/nginx/common/.
      Es importante que examine detenidamente la configuración de su propio servidor en locations.conf. Si ya existe una regla locations para la ubicación mencionada, debes adaptarla utilizando el código anterior; de lo contrario, como se mencionó, simplemente inserta, guarda y luego ejecuta la nueva configuración de nginx utilizando el comando de terminal nginx -t Compruebe brevemente. Si el nginx en el terminal informa de que todo es tutti, puede utilizar service nginx restart Reinicie el servidor web para cargar la nueva configuración.

      Buena suerte.

      Responder
  3. Frank

    Gracias y lo siento ... Yo había pasado por alto Nginx en el título. Estoy buscando una protección hotlink funcionamiento para mi tienda Magento en un Apache, preferiblemente sin sanciones de Google.

    Responder
    • Saskia Lund

      ¡Hola Frank!

      Para un homólogo de Apache, intente añadir lo siguiente a su archivo .htaccess en el directorio raíz de su sitio web:

      1ª variante (si en general desea prohibir el hotlinking de archivos de imagen, pero desea permitir el hotlinking para determinados dominios (por ejemplo, google.*, bing.*, yahoo.*, yandex.*, duckduckgo.*, etc.):

      RewriteEngine activado
      # Elimine la siguiente línea si también desea bloquear las URL de referencia vacías:
      RewriteCond %{HTTP_REFERER} !^$
      
      RewriteCond %{HTTP_REFERER} !^https?://(.+\.)?sudominio.com [NC].
      RewriteRule \.(jpe?g|png|gif|bmp)$ - [NC,F,L]
      
      # Si ahora desea mostrar una imagen de sustitución en lugar de la imagen a la que realmente se ha hecho el hotlink, sustituya la regla anterior de la siguiente manera:
      # RewriteRule \.(jpe?g|png|gif|bmp) http://deinedomain.de/blocked.png [R,L]
      
      # Permitir hotlinking desde los siguientes sitios (dominios)
       RewriteCond %{HTTP_REFERER} !^https?://(www\.)?google\.com/.*$ [NC]

      2. si sólo desea bloquear el hotlinking para determinados referrers (dominios malos):

      RewriteEngine activado
      RewriteCond %{HTTP_REFERER} ^https?://(.+\.)?schlingel1\.com [NC,OR]
      RewriteCond %{HTTP_REFERER} ^https?://(.+\.)?schlingel2\.com [NC,OR]
      RewriteRule \.(jpe?g|png|gif|bmp)$ - [NC,F,L]
      
      # Si ahora desea mostrar una imagen de sustitución en lugar de la imagen a la que realmente se ha hecho el hotlink, sustituya la regla anterior de la siguiente manera:
      # RewriteRule \.(jpe?g|png|gif|bmp) http://deinedomain.de/blocked.png [R,L]

      Espero que esto te ayude

      Saludos cordiales
      Saskia

      Responder
  4. Miller

    ¿Quién conoce una protección hotlink para bmbfotos.com?
    nada funciona para esta página

    Responder
    • Saskia Lund

      ¡Hola "Müller"!
      ¿Qué imágenes del sitio web mencionado están enlazadas en caliente, por ejemplo?
      Quizá puedan ayudarle más.

      Saludos cordiales
      Saskia Lund

      Responder
  5. Ralph

    ¿Es posible bloquear sólo un dominio? ¿Por reescritura?

    Responder

Enviar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Envío de