2016-03-03 44 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。

相關問題