amazon hotlinking amazon-cloudfront

La prevención de Amazon Cloudfront hotlinking



amazon-cloudfront (7)

Utilizo Amazon Cloudfront para alojar todas las imágenes y videos de mi sitio, para servirlos más rápido a mis usuarios, que están bastante dispersos en todo el mundo. También aplico el almacenamiento en caché hacia delante bastante agresivo a los elementos alojados en Cloudfront, configurando Cache-Control a public, max-age=7776000 .

Recientemente descubrí para mi molestia que los sitios de terceros están enlazando a mi servidor Cloudfront para mostrar imágenes en sus propias páginas, sin autorización.

He configurado .htaccess para evitar la conexión en caliente en mi propio servidor, pero no he encontrado una forma de hacerlo en Cloudfront, que parece no admitir la función de forma nativa. Y, de manera molesta, las Políticas de Bucket de Amazon, que podrían usarse para evitar el hotlinking, tienen efecto solo en S3, no tienen efecto en las distribuciones de CloudFront [ link ]. Si desea aprovechar las políticas, debe administrar su contenido directamente desde S3.

Recorrer los registros de mi servidor en busca de hotlinkers y cambiar manualmente los nombres de los archivos no es realmente una opción realista, aunque he estado haciendo esto para terminar con las ofensas más flagrantes.

Cualquier sugerencia será bienvenida.


¿Qué hay de usar cookies firmadas? Cree una cookie firmada utilizando una política personalizada que también admite varios tipos de restricciones que desea configurar y también es un comodín.


A partir de octubre de 2015, puede utilizar AWS WAF para restringir el acceso a los archivos de Cloudfront. Aquí hay un artículo de AWS que anuncia WAF y explica qué puede hacer con él. Aquí hay un artículo que me ayudó a configurar mi primera ACL para restringir el acceso según la referencia.

Básicamente, creé una nueva ACL con una acción predeterminada de DENY. Agregué una regla que verifica el final de la cadena del encabezado del remitente para mi nombre de dominio (en minúsculas). Si pasa esa regla, PERMITE el acceso.

Después de asignar mi ACL a mi distribución de Cloudfront, intenté cargar uno de mis archivos de datos directamente en Chrome y obtuve este error:


El enfoque oficial es utilizar urls firmados para sus medios de comunicación. Para cada pieza de medios que desea distribuir, puede generar una url especialmente diseñada que funcione en una restricción dada de tiempo y origen de IP.

Un enfoque para las páginas estáticas es generar urls temporales para los medios incluidos en esa página, que son válidos por 2 veces la duración del tiempo de almacenamiento en caché de la página. Digamos que el tiempo de almacenamiento en caché de su página es de 1 día. Cada 2 días, los enlaces serían invalidados, lo que obliga a los hotlinkers a actualizar sus URL. No es infalible, ya que pueden construir herramientas para obtener las nuevas URL de forma automática, pero debería evitar a la mayoría de las personas.

Si su página es dinámica, no debe preocuparse por destruir la memoria caché de su página, por lo que simplemente puede generar direcciones URL que solo funcionan para la IP del solicitante.


Esta pregunta menciona archivos de imagen y video.
La verificación de referencia no se puede usar para proteger los recursos multimedia de los enlaces en caliente porque algunos navegadores móviles no envían el encabezado de referencia cuando se solicita un archivo de audio o video reproducido con HTML5.
Estoy seguro de eso sobre Safari y Chrome en iPhone y Safari en Android.
¡Demasiado! Gracias, Apple y Google.


Por lo que sé, actualmente no hay una solución, pero tengo algunas sugerencias posiblemente relevantes, posiblemente irrelevantes ...

Primero: muchas personas han preguntado esto en los foros de soporte de Cloudfront. Ver here y here , por ejemplo.

Claramente, AWS se beneficia de la conexión en caliente: ¡mientras más visitas, más nos cobran! Creo que nosotros (los usuarios de Cloudfront) necesitamos iniciar algún tipo de campaña muy orquestada para que ofrezcan la verificación de referencias como una característica.

Otra solución temporal que he pensado es cambiar el CNAME que uso para enviar tráfico a cloudfront / s3. Digamos que actualmente envías todas tus imágenes a:

cdn.blahblahblah.com (que redirige a un grupo de cloudfront / s3)

Puede cambiarlo a cdn2.blahblahblah.com y eliminar la entrada de DNS para cdn.blahblahblah.com

Como cambio de DNS, eso anularía a todas las personas que actualmente están conectando en caliente antes de que el tráfico llegara a algún lugar cerca de su servidor: la entrada de DNS simplemente no buscaría. Tendría que seguir cambiando el CNAME cdn para que esto sea efectivo (¿una vez al mes?), Pero funcionaría.

En realidad, es un problema mayor de lo que parece, ya que significa que las personas pueden raspar copias completas de las páginas de su sitio web (incluidas las imágenes) de manera mucho más fácil, por lo que no solo son las imágenes que pierde y no solo que está pagando para servir esas imágenes. Los motores de búsqueda a veces concluyen que sus páginas son las copias y las copias son los originales ... y bang va a su tráfico.

Estoy pensando en abandonar Cloudfront en favor de un servidor dedicado súper rápido y estratégicamente posicionado (que sirve todo el contenido a todo el mundo desde un solo lugar) para darme mucho más control sobre esas cosas.

De todos modos, espero que alguien más tenga una mejor respuesta!


Tuvimos numerosos problemas de hotlinking. Al final creamos sprites css para muchas de nuestras imágenes. Añadiendo espacios en blanco a la parte inferior / lados o combinando imágenes juntas.

Los mostramos correctamente en nuestras páginas usando CSS, pero cualquier enlace activo mostraría las imágenes incorrectamente a menos que también copiaran el CSS / HTML.

Hemos encontrado que no molestan (o no saben cómo).


Puedes reenviar el encabezado del Referer a tu origen

  1. Ir a la configuración de CloudFront
  2. Editar configuraciones de distribución para una distribución
  3. Vaya a la pestaña Comportamientos y edite o cree un comportamiento
  4. Establecer encabezados hacia adelante a la lista blanca
  5. Añadir el Referer como un encabezado en la lista blanca
  6. Guarda la configuración en la esquina inferior derecha

Asegúrese de manejar el encabezado del Referer en su origen también.