使用-T开关运行时,不安全的$ ENV {PATH}

时间:2016-03-03 07:56:17

标签: perl perl-module

请帮帮我。

我在perl模块文件中有代码。当我在网络上提交按钮时,我想调用外部脚本perl。 这是我在perl模块文件中的代码。

package web::modify::send;
use strict;

use warnings FATAL => 'all';
no warnings 'redefine';<br>
sub send{
        my $s = shift;
        my $op = $s->param('Submit');
        eval {
           if($op eq 'send'){
             system("./../bin/perl1.pl >> /log/file/perl1.log 2>&1 &");
           }
        };
        return;
}
1;

我有这样的警告:
[星期一2月29日11:54:38 20] [警告]在/home/file/web/modify/send.pm第1230行使用-T开关运行时,$ ENV {PATH}不安全。\ n

1 个答案:

答案 0 :(得分:1)

该错误是由&#34;污染&#34;生成的错误。模式 - 正如你已经想到的那样。

$PATH环境变量包含相对路径时,或者路径包含不可信用户可写的内容时,它会发出警报。这是因为相对路径因运行脚本的位置和人员而异,因此允许隐藏system次调用....

就像你在这里做的那样:

system("./../bin/perl1.pl >> /log/file/perl1.log 2>&1 &");

避免这种情况的方法是 - 避免$PATH中的任何相对路径,例如不以/开头的。并使用绝对路径到您在脚本中运行的任何二进制文件。

请参阅:perldoc perlsec

  

对于&#34;不安全的$ ENV {PATH}&#34;消息,您需要将$ENV{'PATH'}设置为已知值,并且路径中的每个目录必须是绝对的,而不是由其所有者和组以外的其他目录。即使可执行文件的路径名完全合格,您也可能会惊讶地收到此消息。这不是因为您没有提供程序的完整路径而生成的;相反,它是因为你从未设置过PATH环境变量而生成的,或者你没有将它设置为安全的东西。因为Perl不能保证所讨论的可执行文件本身不会转向并执行一些依赖于你的PATH的其他程序,所以它确保你设置PATH。