是否推荐使用 perl 的污点模式开发 Plack 应用程序(中间件)?
如果是,如何在受污染的模式下启动 plackup 和/或 Starman?在使用 shebang 行轻松完成的简单 CGI 脚本中。
会perl -T /path/to/{plackup|starman}
做这份工作吗?或者这里有什么推荐的方法?还是不推荐?
关于 Plack+Taint 模式组合的任何想法、提示和文章?
我们通常不建议人们在 taint 模式下开发 Plack 应用程序,只是因为我个人不相信 taint 模式的用处。
Plack 的核心实用程序,例如 plackup 和 Plack::Utli 尤其不能很好地与 taint 模式配合使用,因为它需要将给定的 .psgi 文件编译为源代码。如果你真的想在 taint 模式下开发你的应用程序,你必须绕过 plackup 并使用 Plack::Handler 或 Plack::Loader。
解决 plackup util 的方法很简单,我可以给你一个 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);
然后用 taintmode perl -T 启动你的 startup.pl 脚本