加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Perl:安全评估?

发布时间:2020-12-16 06:16:52 所属栏目:大数据 来源:网络整理
导读:我很好奇是否有关于进行限制性逃避的任何好消息. 查看文档,有一个使用Safe的reval方法,但我不确定它有多安全. 我想要做的是能够将各种条件语句作为字符串传递给没有eval的源的函数. 例如: sub foo { my $stmt = shift; my $a = 3; say eval($stmt)?"correct
我很好奇是否有关于进行限制性逃避的任何好消息.

查看文档,有一个使用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}  );

使用Safe会对此有好处吗?我需要做的就是比较,没有磁盘访问或变量操作.

解决方法

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

如果你在Safe区间中重新计算($stmt),基本上会发生相同的事情,该语句是eval’d,但它在一个新的词汇上下文中得到了评估,该上下文只能看到Safe隔离专区的名称空间,并且你可以控制它允许哪种操作符.

所以,是的,如果你在那个隔间中声明一个安全隔间和reval($stmt),那么(a)执行$stmt将不会在未经你同意的情况下改变你的程序的功能(我想这就是你的意思)没有来源滥用评估“).并且,(b)是,如果您重新评估($stmt),$stmt将无法在未经您同意的情况下访问磁盘.在(a)中“您的同意”要求明确地使用符号表,并且在(b)“您的同意”中需要指定一组允许磁盘访问的op codes.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读