L'app HTML5 può accedere alla cronologia di navigazione?

3

Spero che questo sia il posto giusto per porre questa domanda. Attualmente sto discutendo con un collega se è possibile ottenere la cronologia di navigazione di un visitatore del mio sito con una speciale applicazione HTML5.

Diciamo che l'utente ha visitato Amazon.com, Facebook.com e poi naviga sul mio sito example.com dove usa un'app HTML5.

Il mio collega afferma che l'utilizzo dell'API cronologia ( link o link ) Dovrei essere in grado di vedere che l'utente ha visitato Amazon.com e Facebook.com prima. Perché? Perché per manipolare la cronologia di navigazione, l'app HTML5 deve prima leggere la cronologia. È vero? Non posso davvero crederci.

Se non è vero, puoi spiegarmi come funziona esattamente questa API della cronologia?

    
posta John Doe 18.02.2017 - 17:12
fonte

2 risposte

2

I should be able to see that the user visited Amazon.com and Facebook.com before.

No, non puoi accedere arbitrariamente alla cronologia di navigazione.

  • Tu puoi scoprire quante voci ha la cronologia ( history.length ).
  • Puoi puoi tornare a una di queste voci della cronologia (ad esempio history.go(-2) ).
  • Tu non puoi sapere quali sono queste voci, né il dominio né l'URL.

in order to manipulate the browsing history, the HTML5-App needs to read the history first.

Bene, i dettagli delle voci precedenti esistono in memoria, ma il browser li nasconde dagli script di contenuto. Altrimenti, essere in grado di accedere alla cronologia incrociata causerebbe ovviamente enormi problemi di privacy. Immagina solo che uno dei siti precedenti avesse un token di reimpostazione della password nell'URL.

If it's not true, can you explain to me how exactly this History-API works?

In HTML5 puoi manipolare lo stato dello stack cronologico, ad es. utilizzando history.pushState() . Ciò è particolarmente utile per i siti Web con molte interazioni AJAX che desiderano modificare l'URL senza ricaricare l'intera pagina. 1 Tuttavia, puoi modificare l'URL solo per i percorsi che appartengono allo stesso dominio e puoi solo accedere gli oggetti di stato per la pagina corrente. Potete trovare ulteriori considerazioni di sicurezza in questa recensione sicurezza delle API di Mozilla.

(nota che in passato ci sono stati molte perdite di dati della cronologia di navigazione che potrebbero rivelare gli URL visitati attraverso canali laterali, ad esempio abusando delle proprietà CSS. Ma questi attacchi non sono direttamente correlati all'API.)

1 Può anche essere utile per un utente malintenzionato che desidera nascondere l'XSS riflesso nell'URL modificando dinamicamente il percorso verso qualcosa di meno sospetto. Ecco perché all'epoca questa estensione dell'API è stata piuttosto controversa .

    
risposta data 18.02.2017 - 18:33
fonte
0

Il tuo collega ha torto. L'API della cronologia JS non può accedere agli elementi precedenti della cronologia dell'accesso multipiattaforma. Quando guardi nell'API, non troverai chiamate di lettura, ma solo eliminazione, sostituzione, aggiunta alla cronologia. C'è history.back() , ma in realtà lascerà la pagina corrente , e inoltre, non ti darà alcuna informazione che non avresti ottenuto attraverso l' referrer HTTP.

Quindi, no, per modificare qualcosa non è necessario leggerlo. Il browser internamente deve mantenere la cronologia, ma non è necessario esporre quel contenuto all'applicazione JS modificante.

    
risposta data 18.02.2017 - 18:32
fonte

Leggi altre domande sui tag