Plack & Taint Mode
Рекомендуется ли разрабатывать приложения Plack (middlewares) с режимом заражения Perl?
Если да, как запустить plackup и / или Starman в испорченном режиме? В простом CGI-скрипте это легко сделать с помощью строки shebang.
Будет perl -T /path/to/{plackup|starman}
сделать работу? Или вот какой рекомендуемый способ? Или это не рекомендуется?
Есть идеи, указатели, статьи о сочетании режима Plack+Taint?
2 ответа
Обычно мы не рекомендуем людям разрабатывать приложения для Plack в режиме taint, просто потому, что я лично не верю в полезность режима taint.
Основные утилиты Plack, такие как plackup и Plack:: Utli, особенно плохо работают с режимом taint, потому что он должен скомпилировать данный файл.psgi в качестве исходного кода. Если вы действительно хотите разрабатывать свое приложение в режиме taint, вы должны обойти блокировку и использовать Plack:: Handler или Plack:: Loader.
Это просто обойти утилиту plackup, я могу дать вам пример для fastcgi, но это должно быть возможно сделать то же самое с Starman забудь о файле.psgi и использовать простой скрипт запуска:
my $app = sub {
my $env = shift;
#...
}
#read the pid file, check for an old process, kill the old process...
#...
#choose a psgi Server impl.
#i prefere fcgi
my $manager = new FCGI::ProcManager::MaxRequests({
'max_requests'=>100,
'pid_fname'=>$pid_file,
'n_processes'=> 3,
'pm_title'=> $name
});
my $server = Plack::Handler::FCGI->new(
'listen'=>[$socket],
'detach' => 1,
'manager' => $manager
); # или использовать Plack::Loader для загрузки сервера
# запустите ваше приложение $server->run($app);
затем запустите ваш скрипт startup.pl с помощью taintmode perl -T