Perl:为什么.在Debian 9中不再是@INC的一部分了吗?

chr*_*s01 8 perl debian

在安装Debian 9时,我发现它.不再是其中的一部分了@INC.

为x86_64-linux-gnu-thread-multi构建的Perl(v5.24.1)

Built under linux
Compiled at Jan 15 2017 23:35:20
@INC:
 /etc/perl
 /usr/local/share/perl/5.24.1
 /usr/lib/x86_64-linux-gnu/perl5/5.24
 /usr/share/perl5
 /usr/lib/x86_64-linux-gnu/perl/5.24
 /usr/share/perl/5.24
 /usr/local/lib/site_perl
 /usr/lib/x86_64-linux-gnu/perl-base
Run Code Online (Sandbox Code Playgroud)

有谁知道为什么?

sim*_*que 14

因为.已经从@INC5.24.1中删除了核心模块.这是一个安全功能,以防止此博客文章谈论的漏洞利用.

2月份,我用Perl 5 Porters打开了一张票,让他们接受一个非默认的删除选项.来自@INC.不幸的是,我被打败了,并且Perl 5 Security披露了漏洞.TL; DR:现在已经有了关于拥有的不安全感.在@INC.

对于5.24.1 ,更改记录在perldelta中.

这可以防止攻击者将可选模块注入由攻击者可写入当前目录的另一个用户运行的进程,例如/ tmp目录.

它很可能在5.26中完全删除.这里有关于p5p邮件列表的更多讨论,摘自这篇博客文章.

以下是(某些)进行这些更改的提交.

Perl的南瓜索耶X也解释了这个在谈话的Perl 5.24,5.26,和Perl 5的未来,他给在2017年FOSDEM.这是谈话的录音1.


1)2017年FOSDEM Perl会议室的所有视频

  • 我会使用`FindBin`来添加本地库,这样你就不必担心错误的cwds了. (3认同)
  • 我想知道他们为什么不简单地在`@ INC`中创建相对于脚本而不是CWD的路径.这将解决问题(并且意味着我们最终可以使用`use lib'.';`而不是`使用FindBin qw($ RealBin);使用lib $ RealBin;`),但是它可能会破坏太多? (3认同)
  • @chris如果你需要它,是的.更好的解决方案是将您的东西放在`lib`目录中并使用`use lib"lib"` (2认同)