Perl 评估随机文本是否危险?

Perl 评估随机文本是否危险?,perl,Perl,今天下午我一直在通过生成随机字符串并通过Perl的eval来打发时间。脚本是仅包含以下字符的字符串: +-*$_.,/\@()%=` 我摔坏东西的风险有统计学意义吗 注意:我不会像“rm-rf/”那样传递参数。我的直觉是,明确地回答这个问题(即,以实际概率)可能最终会得到一个不可计算的界。所以,从数学上来说,很可能不可能回答你的问题 如果您担心,为什么不对Perl过程进行沙箱处理呢?从统计学家的角度来看,这在统计学上很重要,不。从程序员的角度来看,是的。任何可以避免的风险百分比都太高了 $可以

今天下午我一直在通过生成随机字符串并通过Perl的
eval
来打发时间。脚本是仅包含以下字符的字符串:

+-*$_.,/\@()%=`
我摔坏东西的风险有统计学意义吗


注意:我不会像
“rm-rf/”

那样传递参数。我的直觉是,明确地回答这个问题(即,以实际概率)可能最终会得到一个不可计算的界。所以,从数学上来说,很可能不可能回答你的问题


如果您担心,为什么不对Perl过程进行沙箱处理呢?

从统计学家的角度来看,这在统计学上很重要,不。从程序员的角度来看,是的。任何可以避免的风险百分比都太高了

$可以解析为多种字符串,具体取决于平台和语言环境。所以可能是

eval "$!=$$/$.,`$!`"

有可能造成恶作剧。

如果“太本地化”是关于字符的选择,我也希望听到关于其他人的答案。我感兴趣的是解释一下
+$$
到底在做什么。@Rob:See(of
say.+$$$
),如果你愿意,我会宠坏你:)@)是一个空数组,所以它转换为0。$$是当前的PID,因此这是
\uuuu$$
\uuu
被转换为字符串
“\uuu”
,而字符串又在数值上下文中转换为
0
,因此这将生成一个
0..$$
列表。它不会自己打印,尽管它可能会构造一些使用这些字符打印的东西。@Rob spoiler百分比当然很重要。“统计显著性”的意思是,如果它比宇宙的热死需要更长的时间,我不会担心。从程序员的角度来看,你发现了什么风险?抱歉@Tim Nordenfur。我不是一个很好的perl程序员,不能用您提供的字符创建危险的语句。然而,我的意思是,即使构建一个危险语句的可能性非常低,我仍然会犹豫是否允许这样一个程序执行。你也害怕陨石吗?:)丢失备份数据的10^-100风险并不能证明花几分钟来构建沙箱是合理的。@Tim我不同意,构建沙箱可能比执行随机(潜在危险的)Perl 5脚本更好。我不担心确切的概率。我写统计显著性的原因是,可能有一种方法可以生成一个巨大的列表,在标量上下文中对其进行计算,并将数字作为二进制代码执行。这不是真正的风险。@Tim,任何没有确切概率的答案都是猜测。不太可能做坏事,但可能性有多大?这可能是未知的。谢谢,这很有帮助。我没有写
在问题中,但这正是我希望得到的回答。没有“!”在他的示例字符串中。不过,我同意,暴露于shell是一种风险,特别是因为它暴露了一种全新的语法(sh、bash、msdos等),以及与进程和文件系统的密切链接。还有另外一个问题;如果这个测试是作为一个更大的脚本的一部分运行的,那么像$\和$/这样的特殊变量可能会从远处改变程序的行为。另外,$\和$/如果在循环中进行求值,则为状态机提供累加器和寄存器。//也提供正则表达式。@DavidO:更改包装程序的能力绝对值得注意。除了DoS之外,正则表达式在任何方面都是一个漏洞吗?正则表达式打开了一个新的可能语法。我不确定风险,因为构造可能会变得多么复杂。您确实提供了捕获所需的字符,这些字符在脚本中填充$1、$2和更改$+、$&等。加上一个regexp有一个返回值,所以$/=/++/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+/+//+/+/+/+/+/+/+/+//将把输入记录分隔符停在输入文件中等于4的任何字节上。@DavidO:我明白你的意思了。但请注意,字符“4”(ASCII 52)上的$/=4拆分。