如果我不懂perl语言,如何检查Perl代码是否安全?

时间:2011-06-17 18:30:40

标签: perl

Perl看起来非常简单和小巧。

一位朋友希望我运行一个简单的perl代码,我不明白perl脚本是否会比应该做的更多。

perl脚本可以像后门一样工作吗?可能是的然后..

如果perl脚本没有捕获显示信息,记录击键和其他东西,非程序员将如何看待?

谢谢

5 个答案:

答案 0 :(得分:8)

如果您不理解该脚本,那么您没有比运行普通二进制可执行文件更多的保证。也就是说:你真的没有任何保证。

显然,不要以root身份运行程序(:

如果你真的需要运行脚本并且不信任你的朋友,你可以尝试在“沙盒”中运行它,例如虚拟操作系统,chroot'环境或{{ 3}}。 这是jail沿着这些方向。

答案 1 :(得分:4)

由于您怀疑该脚本是恶意的,因此您应该不能运行它。如果可能,按照建议粘贴您的代码,以便我们可以查看。

答案 2 :(得分:1)

除了一些值得注意的例外情况,我们可以制作一份清单,以减轻一些恐惧。

  1. 在此处发布或调查所使用的模块(use Some::Module)这些模块中的大多数将存在于CPAN(Perl模块的公共存储库)上。虽然这将是一个开放式搜索,但这将帮助您查看是否正在使用记录器或网络连接(use strict; use warnings;没问题。)
  2. 发布此处或记录所有open命令,因为这些命令可以读取/写入文件或进行其他系统连接。
  3. 发布此处或调查所有system命令,甚至是“”,因为Perl使用这些命令在您的计算机上运行程序。
  4. Perl还有隐藏此类活动的机制。例如,tie命令允许这些操作隐藏在变量中,use overload编译指示允许它们隐藏在函数或运算符中。 (其中许多需要在package环境中完成(缺少更好的词),所以请注意这些)。最后,eval/e/ee正则表达式标志用于评估(读取:执行)代码,这些代码以其他形式存在,可能存储在变量中,或者在运行中创建,隐藏的代码可以通过这种机制“活跃起来”。
  5. glob运算符“*”允许重命名Perl中的任何内容,因此如果有人看到*something = \*STDOUT,可能会跟随它。请注意,这与简单乘法运算符的符号相同。
  6. 在Perl中还有很多方法可以做恶意事件,而且上述事情中没有一个是不可能的,甚至不常见,但这或许会给你一个开始的地方。

答案 3 :(得分:0)

真的不可能知道脚本是否是恶意的(甚至图片文件可能包含恶意代码!),但是如果你想运行它,请尝试在虚拟机,沙箱或甚至{ {3}}(只是告诉作者你是否可以打破它,所以他可以解决它,或者那就是http://codepad.org)。

答案 4 :(得分:0)

为什么不让他一行一行地解释它是如何工作的?如果他真的是你的朋友,我无法想象他为什么要你运行恶意代码。