Sicuramente evitare di utilizzare eval
per fare qualcosa del genere, o ti aprirai alle vulnerabilità XSS (Cross-Site Scripting).
Per esempio, se si sceglie di usare i eval
soluzioni proposte qui, un utente nefasto potrebbe inviare un link al loro vittima che si presentava così:
http://yoursite.com/foo.html?func=function() {alert ('Im% 20 In% 20Teh% 20Codez');
E la loro javascript, non la tua, sarebbe stata eseguita. Questo codice potrebbe fare qualcosa di molto peggio di un semplice avviso; potrebbe rubare i cookie, inviare richieste alla tua applicazione, ecc.
Quindi, assicurati di non inserire mai il codice eval
non attendibile proveniente dall'input dell'utente (e qualsiasi cosa sull'id della stringa di query considerata input dell'utente). Puoi inserire l'input dell'utente come una chiave che indicherà la tua funzione, ma assicurati di non eseguire nulla se la stringa data non corrisponde a una chiave nell'oggetto. Per esempio:
// set up the possible functions:
var myFuncs = {
func1: function() { alert('Function 1'); },
func2: function() { alert('Function 2'); },
func3: function() { alert('Function 3'); },
func4: function() { alert('Function 4'); },
func5: function() { alert('Function 5'); }
};
// execute the one specified in the 'funcToRun' variable:
myFuncs[funcToRun]();
Questo fallirà se la variabile funcToRun
non punta a nulla nell'oggetto myFuncs
, ma non verrà eseguito alcun codice.
Questo è stato chiesto circa 18 volte prima su SO. * Per favore * cerca. –
suona più come una richiamata ... vero? – Perpetualcoder
@Crescent Fresh, FWIW, non vedo nulla nella barra laterale correlata che sembra rilevante. –