我很好奇,如果有任何有關執行限制性演示的好信息。Perl:safe eval?
看看文檔,有一個use Safe
有一個reval
方法,但我不知道這是多麼安全。
我想要做的就是能夠將各種條件語句作爲字符串傳遞給不包含濫用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的意思是注入代碼來做破壞性的事情。應該小心處理Eval,但是在這種情況下,我正在創建一個可以使用它的模塊,所以無論我如何使它更安全都會有所幫助。我必須相信,codepad.org正在使用某種形式的小牛肉,如果您嘗試使用'print \'ls -l \';'您會得到'不允許的系統調用:SYS_pipe' – vol7ron 2012-02-05 22:22:16
是的,這正是reval可以爲您做的。我們在我們的應用程序中使用它,它基本上具有迷你編程環境。此外,配置文件直接包含perl數據結構,因此我們也使用它來確保在允許配置文件修改環境之前沒有什麼好玩的。 – Jason 2012-02-06 04:19:55
謝謝Jason,你知道匿名子程序調用(我的最後一個例子)是否仍然可以運行? – vol7ron 2012-02-06 04:59:30