gpt4 book ai didi

Perl:安全评估?

转载 作者:行者123 更新时间:2023-12-05 00:33:49 24 4
gpt4 key购买 nike

我很好奇是否有任何关于执行受限评估的好信息。

查看文档,有一个 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对这个有好处吗?我需要做的就是比较,没有磁盘访问或变量操作。

最佳答案

indicated in the docs , eval($stmt)评估 $stmt “在当前 Perl 程序的词法上下文中,以便之后保留任何变量设置或子例程和格式定义。”这对于延迟执行 $stmt 很有用直到运行时。

如果您 reval($stmt)Safe隔离区,本质上发生了同样的事情,语句被评估,但它是在新的词法上下文中评估的,该上下文只能看到安全隔离区的命名空间,并且您可以控制允许使用哪种类型的运算符。

所以,是的,如果你声明一个 Safe 隔间和 reval($stmt)在那个隔间中,然后 (a) 执行 $stmt未经您的同意,不会更改您的程序的功能(我想这就是您所说的“没有滥用 eval 的源”的意思)。并且,(b) 是的,$stmt如果您 reval($stmt),未经您的同意将无法访问该磁盘.在 (a) 中“您的同意”需要明确地使用符号表,而在 (b) 中“您的同意”需要指定一组 op codes这将允许磁盘访问。

我也不确定这有多安全。但是,如果您设置它并在调试器中逐步执行它,您可以看到它的运行情况。

关于Perl:安全评估?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9144902/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com