2016-03-03 49 views
1

请帮助我。

我有perl模块文件中的代码。当我在web中提交按钮时,我想调用一个外部脚本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; 

和我有一个这样的警告:
[周一年02月29 11时54分38秒20 ] [警告]不安全$ ENV {PATH}通过/ home /文件/网页与-T开关运行时/modify/send.pm 1230行。\ n

+0

您的代码和错误消息不适合在一起。 1230行是什么?它是如何用'-T'污染模式开关调用的?你的网络服务器是否这样做?你正在显示的'send'方法从来没有被调用,我们在这里看到的是,在你的代码中没有提及'$ ENV {PATH}'。你的代码中还有一个'
',在第4行。这不属于那里。请[编辑]你的问题并清除它。 – simbabque

回答

1

这个错误是由“污点”模式产生的 - 正如你所想的那样。

它会在$PATH环境变量包含相对路径时发出警报,或者路径中包含可由不受信任的用户写入的内容。这是因为,相对于路径不同的地方不同 - 谁 - 正在运行的脚本,从而允许system调用被颠覆....

就像你在这里做什么:

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

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

参见:perldoc perlsec

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

相关问题