¿La aplicación HTML5 puede acceder al historial de navegación?

3

Espero que este sea el lugar correcto para hacer esta pregunta. Actualmente estoy discutiendo con un colega si es posible obtener el historial de navegación de un visitante de mi sitio con una aplicación HTML5 especial.

Supongamos que el usuario visitó Amazon.com, Facebook.com y luego navega a mi sitio example.com donde usa una aplicación HTML5.

Mis colegas afirman que utilizan la API de historial ( enlace o enlace ) Debería poder ver que el usuario visitó Amazon.com y Facebook.com antes. ¿Por qué? Porque para manipular el historial de navegación, la aplicación HTML5 necesita leer primero el historial. ¿Es esto cierto? Realmente no puedo creerlo.

Si no es cierto, ¿puede explicarme cómo funciona exactamente esta API de historial?

    
pregunta John Doe 18.02.2017 - 17:12
fuente

2 respuestas

2
  

Debería poder ver que el usuario visitó Amazon.com y Facebook.com antes.

No, no puedes acceder arbitrariamente al historial de navegación.

  • Usted puede averiguar cuántas entradas tiene el historial ( history.length ).
  • Usted puede volver a cualquiera de estas entradas del historial (por ejemplo, history.go(-2) ).
  • Usted no puede conocer qué son estas entradas, ni el dominio ni la URL.
  

para manipular el historial de navegación, la aplicación HTML5 necesita leer el historial primero.

Bueno, los detalles de las entradas anteriores existen en la memoria, pero el navegador las oculta de los scripts de contenido. De lo contrario, el hecho de poder acceder al historial entre dominios obviamente causaría problemas de privacidad masivos. Imagine que uno de los sitios anteriores tenía un token de restablecimiento de contraseña en la URL.

  

Si no es cierto, ¿puede explicarme cómo funciona exactamente esta API de historial?

En HTML5, puedes manipular el estado de la pila de historial, por ejemplo, utilizando history.pushState() . Esto es particularmente útil para sitios web con mucha interacción AJAX que desean cambiar la URL sin volver a cargar toda la página. 1 Pero solo puede cambiar la URL a las rutas que pertenecen al mismo dominio y solo puede acceder Los objetos de estado para la página actual. Puede encontrar consideraciones de seguridad adicionales en esta revisión de seguridad de la API por Mozilla.

(Tenga en cuenta que en el pasado ha habido un montón de historial de navegación filtra vulnerabilidades que podrían revelar las URL visitadas a través de canales laterales, por ejemplo, al abusar de las propiedades de CSS. Pero estos ataques no están directamente relacionados con la API.)

1 También puede ser útil para un atacante que quiera ocultar el XSS reflejado en la URL cambiando dinámicamente la ruta a algo menos sospechoso. Es por eso que en ese entonces esta extensión de la API ha sido algo controversial .

    
respondido por el Arminius 18.02.2017 - 18:33
fuente
0

Tu compañero de trabajo está equivocado. La API de historial de JS no tiene permitido el acceso multiplataforma a los elementos del historial anterior. Cuando mire la API, no encontrará llamadas de lectura, simplemente eliminando, reemplazando, agregando al historial. Hay history.back() , pero en realidad saldrá de la página actual y, además, no le dará ninguna información que no haya recibido a través del HTTP referrer .

Entonces, no, para modificar algo no necesitas leerlo. El navegador internamente necesita mantener el historial, pero no hay necesidad de exponer ese contenido a la aplicación JS modificadora.

    
respondido por el Marcus Müller 18.02.2017 - 18:32
fuente

Lea otras preguntas en las etiquetas