在 couchdb reduce 中使用“eval” - 这有多危险
Using "eval" in a couchdb reduce - just how dangerous is this?
我的文档包含错误列表。我有一个视图,它计算具有特定错误的文档数量,以及具有给定错误的文档具有错误数的平均值。
地图
function (doc) {
var i;
for (i = 0; i < doc.errors.length; i = i + 1){
emit([doc.errors[i], doc.flummery], [1, doc.errors.length])
}
}
减少
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]
}
我已经读过很多次,使用 eval() 是通往疯狂的道路,但我想不出有什么方法可以真正让我绊倒这里。eval() 在 couchdb 视图中安全吗?
请注意,Oleg 提出了一个显而易见的答案,即"不要那样做,couchdb 给你一个 sum() 函数"。很明显,在这种情况下不需要 eval()。但是,如果我需要它,鉴于我可以很好地控制我的输入,使用起来是否安全?
你不能
用sum(avg) / avg.length
代替吗?
eval
调用编译器的全部功能有明显的缺点:它非常耗费资源,并且引入了一个很大的安全漏洞,除非你仔细清理你的输入。
相关文章:
- 递归使用 eval() 是检查程序执行的好方法吗?
- 为什么忽略了eval()代码中的语法错误
- 推荐在JavaScript中执行存储为字符串的函数,而不是使用eval
- Javascript eval()无法处理传递的字符串
- 调用绕过eval()的函数
- Semi-sandboxing Javascript eval
- ES6 模板文字是否比 eval 更安全
- JavaScript 可以在这里使用 eval 吗?
- 如何使用uglifyjs/uglifyjs2解析walk和eval javascript表达式
- 如何使用其他地方指定的访问信息访问嵌套的json对象,而不使用eval或迭代
- 当eval只执行服务器端数据时,在javascript中使用eval是否安全
- 使用eval()定义变量显示未定义的错误
- javascript eval方法语法
- 在Javascript中使用eval的替代方案
- Eval vs execscript
- eval()读取函数参数有多糟糕
- 使用eval()设置全局变量
- 如何使eval'd调试器可访问的javascript代码
- 在 couchdb reduce 中使用“eval” - 这有多危险
- javascript eval(),控制输入&真正的危险