我正在编写一些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功能。不确定这些是否是最好的方法,但我们希望得到一些反馈。
答案 0 :(得分:1)
我认为把它放在核心是更好的,因为eval不能被完美地运用。
Eval以奇怪的方式使用函数。
还有一些其他细微差别需要注意。 来自https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval
例如
不要调用eval()来计算算术表达式; JavaScript的 自动计算算术表达式
安全也是一个问题
eval()是一个危险的函数,它执行它传递的代码 具有来电者的特权。如果使用字符串运行eval() 可能会受到恶意方的影响,您最终可能会运行 具有您的权限的用户计算机上的恶意代码 网页/扩展名。
作为替代,这个怎么样..
您将核心功能存储为单独的文件,并使用接口根据需要输入新代码,这不会花费太多时间来创建。
然后将输入的代码写入文件(附加)。
编辑:如果你只有evalish功能但没有eval,那么这应该没问题,只要功能没有获得超出其范围的变量。但是,如果您不检查代码,相同的安全漏洞仍然存在。此外,如果在编写代码之前没有规划范围和数据流,那么它可能会成为一个噩梦。