Su intuición es correcta de la manera más importante: esto no es, en ningún sentido significativo, "seguro".
Pero la forma en que se derrotó no es exactamente lo que imaginas.
Cuando hace clic en un enlace en una página web, o su navegador carga una imagen incrustada en una página, su navegador se conecta al servidor web y envía una solicitud. En la solicitud se encuentran los encabezados HTTP, que incluyen uno llamado Referer:
. Si bien no siempre está presente (por varias razones que pueden estar fuera del alcance de esta respuesta), el valor que se acompaña es la URL de la página que estaba viendo, en la misma pestaña del navegador, cuando se hizo clic en el enlace o en la imagen. cargado.
La creación de una política de este tipo en S3 implementa el control de acceso mediante el ajuste de cadenas de este valor, enviado por el navegador y casi sin ningún valor desde una perspectiva de seguridad.
Por lo tanto, Javascript en otra pestaña mientras tu página está abierta no es realmente la preocupación. La preocupación es que un usuario malintencionado realice solicitudes con un encabezado forjado Referer:
, que se realiza fácilmente con herramientas de prueba como curl
( curl -v http://example-bucket.s3.amazonaws.com/secret-image.jpg -H 'Referer: http://example.com/good-guy.html'
) o complementos del navegador. Ahora el cubo dice "oh, estás en la página de Good Guy de example.com? Aquí está el archivo de imagen secreto que pediste".
Entonces, con una limitación tan obvia, ¿para qué es realmente útil este mecanismo?
No está asegurando su contenido.
Sin embargo, es útil para evitar la difusión generalizada de enlaces a su contenido, incorporando enlaces a sus activos en sitios de terceros, lo que equivale a un robo de su ancho de banda. Una vez me encontré con un sitio de estafa donde el creador había buscado en Google páginas que mostraban imágenes de tarjetas de regalo. Encontró tales imágenes en uno de mis sitios, pero no las descargó ... incrustó enlaces a mis imágenes en su estafa HTML. Una configuración que niega el referer reduce significativamente tales molestias ... pero ya que es adecuada para muy poco más.
Con S3, puede generar URL firmadas sobre la marcha (asumiendo que su sitio es dinámico) e incrustarlas en el html. Esta es quizás la solución más efectiva, ya que especifica el período de tiempo durante el cual la URL es válida, y estas URL son inmunes a la manipulación hasta el punto de infactibilidad computacional. CloudFront, junto con S3, le permite crear cookies firmadas que logran resultados similares pero sin necesidad de firmar cada enlace individual en cada página que renderiza, pero URL firmadas individuales para objetos con un tiempo de caducidad muy corto, usando HTTPS y entregados a través de HTTPS son un mecanismo efectivo de control de acceso, a diferencia de las políticas de páginas de referencia.