从配置文件加载的自定义函数

时间:2014-05-18 06:32:05

标签: javascript

我正在编写一些javascript,它在客户端公开了一些有限的功能,但每个功能都在服务器端配置。一个简单的例子是公开一个相等函数,允许客户端比较2个字符串。

将要公开的函数应该是相对基本的(等于,不等于,小于等)。理想情况下,如果我们可以在以后需要的时候轻松添加更多功能,那就太好了。

我想知道,拥有一些核心的javascript然后附加更多的javascript更好:

核心逻辑:

var CoreFunctions = {}

附加逻辑:

CoreFunctions.instruction_map = {
    equals: function(a,b){return a==b;}
}

相比之下,拥有包含一些eval< ish功能的核心逻辑然后在JSON中存储函数会更好吗? 核心逻辑:

var CoreFunctions = {};

for {var prop in instruction_map) {
    CoreFunctions[prop] = new Function(instruction_map[prop]);
}

附加逻辑:

instruction_map = {
        'equals': 'return arguments[0]==arguments[1];'
}

目标是在将来轻松添加新功能,在这种情况下,它可能类似于not_equals功能。不确定这些是否是最好的方法,但我们希望得到一些反馈。

1 个答案:

答案 0 :(得分:1)

我认为把它放在核心是更好的,因为eval不能被完美地运用。

Eval以奇怪的方式使用函数。

还有一些其他细微差别需要注意。 来自https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval

例如

  

不要调用eval()来计算算术表达式; JavaScript的   自动计算算术表达式

安全也是一个问题

  

eval()是一个危险的函数,它执行它传递的代码   具有来电者的特权。如果使用字符串运行eval()   可能会受到恶意方的影响,您最终可能会运行   具有您的权限的用户计算机上的恶意代码   网页/扩展名。


作为替代,这个怎么样.. 您将核心功能存储为单独的文件,并使用接口根据需要输入新代码,这不会花费太多时间来创建。 然后将输入的代码写入文件(附加)。

编辑:如果你只有evalish功能但没有eval,那么这应该没问题,只要功能没有获得超出其范围的变量。但是,如果您不检查代码,相同的安全漏洞仍然存在。此外,如果在编写代码之前没有规划范围和数据流,那么它可能会成为一个噩梦。