Perl:安全评估?

Perl:安全评估?,第1张

概述我很好奇是否有关于进行限制性逃避的任何好消息. 查看文档,有一个使用Safe的reval方法,但我不确定它有多安全. 我想要做的是能够将各种条件语句作为字符串传递给没有eval的源的函数. 例如: sub foo { my $stmt = shift; my $a = 3; say eval($stmt)?"correct":"wrong") , "($stmt)";} 我很好奇是否有关于进行限制性逃避的任何好消息.

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

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

总结

以上是内存溢出为你收集整理的Perl:安全评估?全部内容,希望文章能够帮你解决Perl:安全评估?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1239328.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存