Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用;“评估”;在couchdb reduce中,这到底有多危险?_Javascript_Couchdb_Mapreduce - Fatal编程技术网

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]