Beh, non è un grosso rischio per la sicurezza, anche se rivela almeno alcune potenziali interferenze.Non è JavaScript setTimeout e setInterval hanno qualche potenziale vulnerabilità di sicurezza
Supponiamo di avere quei moduli JavaScript molto ben chiusi che vengono caricati nella mia pagina senza conoscersi l'un l'altro. Sono da "fidati", tuttavia alcuni sviluppatori di lib2 hanno fatto un errore, vedere il codice.
Lib1http://good.site/libs/the-famous-important-lib1.js
setInterval(function(){
alert('I am doing some important stuff');
}, 1000);
LIB2http://not-excelent.site/libs/the-cool-lib2.js
var i = setInterval(function(){}, 0);
for(; i >= 0; i-=1) {
clearInterval(i);
}
My Html
<script src="http://good.site/libs/the-famous-important-lib1.js" type="text/javascript"></script>
<script src="http://not-excelent.site/libs/the-cool-lib2.js" type="text/javascript"></script>
In un browser o almeno su Firefox, il caricamento di Lib2 causerebbe la totale interruzione di Lib1. Qualcuno potrebbe dire che questo non è importante, e che sciocco fare questo errore.
Lo considero un cattivo comportamento. Dal momento che stiamo caricando sempre più librerie di terze parti nei nostri siti web. Forse una soluzione adeguata è che setInterval
e setTimeout
dovrebbero restituire un Ojbect per essere davvero unico e non-falso, invece che solo un numero di incremento automatico numerico.
Qualcuno potrebbe sfruttare uno sfruttamento del mondo reale per questo (ancora non ha testato se si tratta di frame incrociati, ne dubito davvero).
La domanda è: E '? e la modalità rigorosa in es5 lo supera?
cancellare gli altri setIntervals? Certo che spezzerà le cose, ma non può accadere nulla di catastrofico. –
soluzione facile .. non utilizzare il codice di altri rifiuti della gente;) – musefan
@SergioTulentsev Ho tuttavia visto un sito Web il cui paywall è _triggered_ da un 'setTimeout()'. Se il timer viene cancellato, i clienti non paganti non vengono espulsi. Assolutamente _lousy_ security design ... – Alnitak