制限付きエバールの実行に関する良い情報があるかどうか不思議です。Perl:安全な評価?
ドキュメントを見ると、reval
メソッドを持つuse Safe
がありますが、どの程度安全かはわかりません。
私がしたいことは、さまざまな条件文を、evalを悪用したソースのない関数に文字列として渡すことができるようにすることです。例えば
:
sub foo {
my $stmt = shift;
my $a = 3;
say eval($stmt)?"correct":"wrong") , "($stmt)";
}
foo(q{1 == $a});
foo(q{$a =~ /3/);
foo(q{(sub {return 3})->() eq 3} );
がuse Safe
このために良いでしょうか?私ができる必要があるのは、比較、ディスクアクセス、または可変操作です。
Jason、thx。私が「評価を濫用する」という意味は、何かを破壊するためのコードを注入することです。 Evalは注意して処理する必要がありますが、この場合は使用するモジュールを作成していますので、より安全にするために何ができるかは参考になります。私はcodepad.orgが何らかの形の子牛を使用していると信じなければならず、あなたが 'print \' ls -l \ ';を試してみると、' 'システムコールを受け付けない:SYS_pipe' – vol7ron
、これはまさにrevalがあなたにできる。基本的にミニプログラミング環境を備えたアプリケーションで使用します。また、configファイルにはperlのデータ構造が直接含まれているので、configファイルに環境を変更させる前にそこに行くのが面白いとは限りません。 – Jason
ありがとうございましたJason、匿名サブルーチンコール(私の最後の例)がまだ実行できるかどうか知っていますか? – vol7ron