Évitez absolument d'utiliser eval
pour faire quelque chose comme cela, sinon vous vous exposerez à des vulnérabilités XSS (Cross-Site Scripting).
Par exemple, si vous utilisez les solutions eval
proposées ici, un utilisateur malveillant pourrait envoyer un lien à sa victime qui ressemblerait à ceci :
[http://yoursite.com/foo.html?func=function()](http://yoursite.com/foo.html?func=function()){alert('Im%20In%20Teh%20Codez');}
Et leur javascript, pas le vôtre, serait exécuté. Ce code pourrait faire bien pire qu'afficher simplement une alerte; il pourrait voler des cookies, envoyer des requêtes à votre application, etc.
Assurez-vous donc de ne jamais utiliser eval
pour du code non fiable provenant de l'entrée utilisateur (et tout ce qui se trouve dans la chaîne de requête est considéré comme une entrée utilisateur). Vous pouvez prendre l'entrée utilisateur comme une clé qui pointera vers 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 :
// Mettre en place les fonctions possibles:
var myFuncs = {
func1: function () { alert('Fonction 1'); },
func2: function () { alert('Fonction 2'); },
func3: function () { alert('Fonction 3'); },
func4: function () { alert('Fonction 4'); },
func5: function () { alert('Fonction 5'); }
};
// Exécuter celle spécifiée dans la variable 'funcToRun':
myFuncs[funcToRun]();
Cela échouera si la variable funcToRun
ne pointe vers rien dans l'objet myFuncs
, mais cela n'exécutera aucun code.