私はperl newbです。perlユーザが提供するサブで、常に評価を行わずにテキストを返します
残念ながら、eval
は私が
my $filter = 'return false;';
my $filterFunc = sub{ eval{ $filter } } ;
while (my $entry = readNextEntry()){
print "Eval:".$filterFunc->($entry)."\n";
}
私はこれを実行すると、私は(というよりも、すべてのパスから返されるリテラル"return false;"
を取得関数が評価される)。私はいくつかのバリエーションを試しましたが、私は魔法の組み合わせを打つことはありません。セキュリティへの影響について
注:私は、ユーザーを午前として、私はコードがない、渡されたかについてのセキュリティ上の懸念を持っていない
。
私の目的は、パラメータが有用であるかどうかわからないので、複数のソースを引き込み、パラメータに基づいてフィルタリングすることです。テキストを渡すことができると思いました。eval
匿名関数、各レコードの関数を実行します(フィルター関数)。私はユーザーであるため、渡されたコードが何をしているかについてセキュリティ上の懸念はありません。
あなたのアプローチがうまくいくと思いますが、私はあなたが 'eval'についてあまり心配するべきではないと思いますが、私はまださまざまな種類のフィルタを実装する方が安全だと言うでしょう。必要に応じてそれらを引数で呼び出す。ディスパッチテーブルはここで便利です。あなた自身をユーザーとして信用しないでください。 – simbabque
私はまったく別の解決策には間違いありません。私は*非常に*一般的なクエリユーティリティを実装しようとしています。その評価へのポイントは、常に真/偽を返し、決して他のことをしない関数に解決されるはずです。短期的には、明らかに私はちょうどevalの仕組みを間違って読んでいます。 –
あなたは何を照会していますか?データが何らかの方法でレコードに基づいている場合は、リレーショナルデータベースにロードしてSQLを使用してください。私はそれがクエリにうまくいくと聞いています。 – simbabque