2016-03-03 2 views
1

, пожалуйста, помогите мне.

У меня есть код в файле модуля 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; 

и у меня есть предупреждение, как это:
[ пн 29 февраль 11:54:38 20 ] [ предупреждают ] Insecure $ ENV {PATH} во время работы с юТ переключатель в/главном/файле/веб /modify/send.pm line 1230. \ n

+0

Ваш код и сообщение об ошибке не подходят друг другу. Что находится в строке 1230? Как он вызывается с помощью переключателя режима «-T»? Ваш веб-сервер делает это? Метод 'send', который вы показываете, никогда не вызывается в том, что мы видим здесь, и в вашем коде не упоминается' $ ENV {PATH} '. В вашем коде есть строка «
», которая не принадлежит к ней. Пожалуйста, отредактируйте свой вопрос и очистите его. – simbabque

ответ

1

Эта ошибка является ошибкой, вызванной режимом «taint» - как вы поняли.

Он предупреждает о том, что переменная среды $PATH включает относительный путь или путь включает в себя объекты, которые могут быть записаны ненадежными пользователями. Это потому, что относительный путь изменяется в зависимости от того, где - а кто - работает сценарий, и, таким образом, позволяет system вызовы извращаться ....

Так же, как вы делаете здесь:

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

Способ избежать этого - избегать любых относительных путей в $PATH, например не начиная с /. И используйте абсолютные пути к любым исполняемым файлам из сценария.

См: perldoc perlsec

Для «небезопасного $ ENV {PATH}» сообщения, вам необходимо установить $ENV{'PATH'} к известному значению, и каждый каталог в пути должен быть абсолютным и не доступен для записи других, чем его владельцем и группой. Вы можете быть удивлены, узнав это сообщение, даже если путь к вашему исполняемому файлу полностью квалифицирован. Это не генерируется, потому что вы не предоставили полный путь к программе; вместо этого он генерируется, потому что вы никогда не устанавливаете переменную среды PATH или не устанавливаете ее в безопасное. Поскольку Perl не может гарантировать, что исполняемый файл, о котором идет речь, сам не собирается поворачиваться и выполнять какую-либо другую программу, зависящую от вашего PATH, он гарантирует, что вы установите PATH.