Определенно избегайте использования eval
, чтобы сделать что-то вроде этого, или вы откроете себя для уязвимостей XSS (Cross-Site Scripting).
Например, если вы должны были использовать eval
предложенные решения здесь, гнусный пользователь может отправить ссылку на свою жертву, которая выглядела так:
http://yoursite.com/foo.html?func=function() {Alert («Im% 20in% 20Teh% 20Codez»);}
И их javascript, а не ваш, будут выполнены. Этот код мог бы сделать что-то гораздо хуже, чем просто всплывающее предупреждение; он может украсть файлы cookie, отправить запросы в вашу заявку и т. д.
Итак, убедитесь, что вы никогда не использовали eval
ненадежный код, который поступает с пользовательского ввода (и что-либо на идентификатор строки запроса считается пользователем). Вы можете ввести пользовательский ввод в качестве ключа, который будет указывать на вашу функцию, но убедитесь, что вы ничего не выполняете, если указанная строка не соответствует ключу вашего объекта. Например:
// 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]();
Это будет ошибкой, если переменная funcToRun
не указывает ни на что в myFuncs
объекта, но он не будет выполнять любой код.
Это вопрос примерно 18 раз раньше, чем SO. * Пожалуйста * Поиск. –
звучит скорее как обратный вызов ... не так ли? – Perpetualcoder
@Crescent Fresh, FWIW, я не вижу ничего в соответствующей боковой панели, которая выглядит актуальной. –