Évitez absolument d'utiliser eval
pour faire quelque chose comme ceci, ou vous vous ouvrirez aux vulnérabilités de XSS (Cross-Site Scripting).
Par exemple, si vous deviez utiliser les eval
solutions proposées ici, un utilisateur malfaisant pourrait envoyer un lien vers leur victime qui ressemblait à ceci:
http://yoursite.com/foo.html?func=function() {alert (« Im% 20Dans% 20Teh% 20Codez »);}
Et leur javascript, pas le vôtre, serait exécuté. Ce code pourrait faire quelque chose de bien pire que simplement faire apparaître une alerte bien sûr; Donc, assurez-vous de ne jamais eval
code non approuvé qui vient de l'entrée de l'utilisateur (et tout ce qui figure sur l'ID de la chaîne de requête est considéré comme une entrée de l'utilisateur). Vous pouvez prendre l'entrée de l'utilisateur comme une clé qui pointera sur votre fonction, mais assurez-vous de ne rien exécuter si la chaîne donnée ne correspond pas à une clé de votre objet. Par exemple:
// 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]();
Cela échouera si la variable funcToRun
ne pointe pas à quoi que ce soit dans l'objet myFuncs
, mais il ne signera pas un code.
Cela a été demandé sur 18 fois avant sur SO. * S'il vous plaît * rechercher. –
ressemble plus à un rappel ... est-ce? – Perpetualcoder
@Crescent Fresh, FWIW, je ne vois rien dans la barre latérale associée qui semble pertinente. –