Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么Perl在-T下运行时不需要某些文件?_Perl_Require_Taint - Fatal编程技术网

为什么Perl在-T下运行时不需要某些文件?

为什么Perl在-T下运行时不需要某些文件?,perl,require,taint,Perl,Require,Taint,我最近注意到,在我的系统上,当在-T下运行时,不可能要求'lib/file.pl',但要求'/lib/file.pl'起作用 $ perl -wT -e 'require "lib/file.pl";' Can't locate lib/file.pl in @INC (@INC contains: /usr/lib/perl5/site_perl/5.14.2/x86_64-linux-thread-multi /usr/lib/perl5/site_perl/5.14.2 /usr/lib/

我最近注意到,在我的系统上,当在
-T
下运行时,
不可能要求'lib/file.pl'
,但
要求'/lib/file.pl'
起作用

$ perl -wT -e 'require "lib/file.pl";'
Can't locate lib/file.pl in @INC (@INC contains: /usr/lib/perl5/site_perl/5.14.2/x86_64-linux-thread-multi /usr/lib/perl5/site_perl/5.14.2 /usr/lib/perl5/vendor_perl/5.14.2/x86_64-linux-thread-multi /usr/lib/perl5/vendor_perl/5.14.2 /usr/lib/perl5/5.14.2/x86_64-linux-thread-multi /usr/lib/perl5/5.14.2 /usr/lib/perl5/site_perl/5.14.2/x86_64-linux-thread-multi /usr/lib/perl5/site_perl/5.14.2 /usr/lib/perl5/site_perl)

$ perl -wT -e 'require "lib/file.pl"'
在不使用
-T
的情况下执行此操作有两种方式: $perl-w-e'需要“lib/file.pl”' $perl-w-e'需要“/lib/file.pl”'

在污染模式下,
不是
@INC
的一部分

perl -w -e 'print "@INC"'
[..snip..] /usr/lib/perl5/site_perl/5.14.2 /usr/lib/perl5/site_perl .
perl -wT -e 'print "@INC"'
[..snip..] /usr/lib/perl5/site_perl/5.14.2 /usr/lib/perl5/site_perl
我在医生身上找不到这种行为。有人能告诉我这是在哪里记录的,或者为什么
-T
不喜欢
作为lib目录吗?

呃。。。我想这实际上是:

当污染模式(-T)生效时,“.”目录将被删除 来自@INC,环境变量PERL5LIB和PERLLIB是 被Perl忽略。您仍然可以通过以下方式从程序外部调整@INC 使用-I命令行选项,如perlrun中所述

。。。但我想这只是答案的一半。作出这一决定的原因如下:

。。。@INC的问题实际上更多的是SUID脚本的问题 而不是CGI脚本。当您有一个SUID脚本可以使用 另一个用户(如root)的权限,Perl进入 自动关闭模式

对于这个SUID脚本案例,拥有它将是一个巨大的安全漏洞 从用户当前目录加载库的功能。 如果脚本最终出现错误,而库在 正常目录路径,则用户可以通过写入 拥有恶意版本的库,将其放入当前 目录,并从其当前目录运行SUID脚本

然而,这与CGI脚本的问题并不完全相同。用户的 没有从任意目录执行脚本。你的网站 服务器控制从哪个目录调用脚本。所以保持 与SUID脚本相比,@INC中的“.”并不是一个真正的问题 自动在污染模式下运行


我只是没看到。现在我正在阅读Perl编程,但仍然没有找到这一部分。非常感谢。