0

ドキュメントにエラーのリストが含まれています。特定のエラーのあるドキュメントの数と、特定のエラーのあるドキュメントに含まれるエラーの平均数をカウントするビューがあります。

地図

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() の使用は狂気への道であると何度も読んできましたが、実際にここでつまずく可能性がある方法は考えられません。couchdb ビューで eval() は安全ですか?

Oleg が明白な答えを思いついたことに注意してください。それは「そんなことはしないでください。couchdb は sum() 関数を提供します」です。この状況では、eval() が不要であることは明らかです。ただし、入力を適切に制御できることを考えると、安全に使用できますか?

4

1 に答える 1

2

sum(avg) / avg.length代わりに使えませんか?

evalコンパイラの全機能を呼び出すという明らかな欠点があります。非常にリソースが多く、入力を慎重にサニタイズしない限り、大きなセキュリティ ホールが発生します。

于 2012-06-14T16:39:38.193 に答える