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

Javascript 从配置文件加载的自定义函数,javascript,Javascript,我正在编写一些javascript,它在客户端公开了一些有限的功能,但每个功能都是在服务器端配置的。一个简单的例子是公开一个相等函数,允许客户端比较两个字符串 将公开的函数应该是相对基本的(等于、不等于、小于等)。理想的情况是,如果我们可以很容易地附加更多的函数,因为我们以后需要它们 我想知道,有一些核心javascript,然后附加更多的javascript是否更好,例如: 核心逻辑: var CoreFunctions = {} 附加逻辑: CoreFunctions.instructio

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

将公开的函数应该是相对基本的(等于、不等于、小于等)。理想的情况是,如果我们可以很容易地附加更多的函数,因为我们以后需要它们

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

核心逻辑:

var CoreFunctions = {}
附加逻辑:

CoreFunctions.instruction_map = {
    equals: function(a,b){return a==b;}
}
instruction_map = {
        'equals': 'return arguments[0]==arguments[1];'
}
相比之下,如果核心逻辑包含一些eval'ish功能,然后将功能存储在JSON中会更好吗 核心逻辑:

var CoreFunctions = {};

for {var prop in instruction_map) {
    CoreFunctions[prop] = new Function(instruction_map[prop]);
}
附加逻辑:

CoreFunctions.instruction_map = {
    equals: function(a,b){return a==b;}
}
instruction_map = {
        'equals': 'return arguments[0]==arguments[1];'
}

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

我认为最好将其放在核心位置,因为eval无法完美工作

Eval以一种奇怪的方式使用函数

eval还有其他一些细微差别,您必须小心。 从

比如说

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

安全也是一个问题

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


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


编辑:如果您只有evalish功能,但没有eval,那么只要该功能没有获取超出其范围的变量,就可以了。但是如果不检查代码,同样的安全漏洞仍然存在。此外,如果在编写代码之前没有计划作用域和数据流,那么以后可能会成为一场噩梦。

考虑到我将从现有的基于Python的web服务器(Flask)提供javascript,这听起来完全可行。除此之外,如果我们希望允许客户端也添加一些基本功能,该怎么办。我认为这必须进行评估,如果是这样的话,将所有内容统一成JSON存储在服务器端数据库中是否更有意义?