Javascript 使用;“评估”;在couchdb reduce中,这到底有多危险?
我的文档包含错误列表。 我有一个视图,它统计有特定错误的文档数,以及有给定错误的文档的平均错误数 地图Javascript 使用;“评估”;在couchdb reduce中,这到底有多危险?,javascript,couchdb,mapreduce,Javascript,Couchdb,Mapreduce,我的文档包含错误列表。 我有一个视图,它统计有特定错误的文档数,以及有给定错误的文档的平均错误数 地图 功能(doc){ var i; 对于(i=0;i
功能(doc){
var i;
对于(i=0;i
}
减少
function (key, values, rereduce) {
var avg = [];
var cnt = [];
var i;
for (i = 0; i < values.length; i = i + 1) {
avg.push(values[i][1]);
cnt.push(values[i][0]);
}
return [sum(cnt), eval(avg.join("+")) / avg.length]
函数(键、值、返回值){
var平均值=[];
var cnt=[];
var i;
对于(i=0;i
}
我已经读过很多次了,eval()的使用是通往疯狂的道路,但我想不出有什么办法能让我在这里绊倒。在couchdb视图中eval()安全吗
注意,Oleg给出了一个显而易见的答案,那就是“不要这样做,couchdb会给你一个sum()函数”。在这种情况下,显然不需要eval()。然而,如果我需要它,在我能很好地控制输入的情况下使用它安全吗?你不能用sum(avg)/avg.length
代替吗
eval
在调用编译器的全部功能时有一个明显的缺点:它占用了大量资源,并且引入了一个很大的安全漏洞,除非您仔细清理输入。同样的代码可以在没有eval()
和join()
的情况下完成。这样你就什么都不用想了。是的,我当然可以。我会的。不过,我想问题仍然存在:如果存在调用eval()的情况,那么在这里安全吗,因为我们对输入有很好的控制?eval
可以在任何地方调用,但总是有更轻量级的方法。这回答了我的问题。谢谢你,奥列格。
function (key, values, rereduce) {
var avg = [];
var cnt = [];
var i;
for (i = 0; i < values.length; i = i + 1) {
avg.push(values[i][1]);
cnt.push(values[i][0]);
}
return [sum(cnt), eval(avg.join("+")) / avg.length]