我需要允许用户配置库中的哪些函数应该由服务器端Javascript进程运行。用户可以在文本框中输入此功能列表(以空格分隔)。当进程运行时,它按空格分割列表,然后使用以下语句找到并运行每个函数:
var curFunction = eval(functionName); curFunction();
除了我们的内部开发人员之外,没有人可以设置要运行的函数列表,但我还是想保护它,因为服务器端脚本可以改变我们的数据库。
我的问题是我是否做得足以保护我们的数据库,拒绝任何匹配以下一项或多项的functionName参数:
我们的想法是将输入限制为函数名称,但不允许使用括号或关键字等任何其他内容,因此除了函数变量赋值之外,用户不应该做任何工作。
有什么方法可以狡猾吗?这些函数不需要使用不同的参数,因此我们只需要函数名称。
答案 0 :(得分:2)
这是你应该做的:
var functions = {
"doSomething":function() {...},
"somethingElse":function() {...},
"dontMessUp":function() {...}
};
一旦你有了这样定义的有效函数,只需调用:
var functionName = "doSomething";
functions[functionName] && functions[functionName]();