在过去的几周里,我一直在磨练我在项目中使用的大型、几十年前的代码库的性能,这里有人建议我应该看看 FastCGI 或 HTTP::Engine 之类的东西。我发现使用 FastCGI 非常简单,但是有一个令人烦恼的问题,我发现答案不一。
我读过的一些文档说你永远不应该调用exit
通过 FastCGI 运行的脚本,因为这会损害保持它持久加载的整个概念。其他人说没关系。我的代码在很多地方都使用了 exit,确保没有任何东西继续执行很重要。例如,我有调用授权检查的受限访问组件:
use MyCode::Authorization;
our $authorization = MyCode::Authorization->new();
sub administration {
$authorization->checkCredentials();
#...Do restricted access stuff.
}
为了尽可能避免代码中出现错误,允许某人在不应该访问这些功能的情况下访问这些功能,在使用checkCredentials
登录页面生成用户友好的响应后,使用 exit() 结束进程,如果答案是用户没有适当的凭据。例如:
sub checkCredentials {
#Logic to check credentials
if ($validCredential) {
return 1;
}
else {
# Build web response.
# Then:
exit;
}
}
}
我已经使用了它,这样我就不会意外地忽略导致安全漏洞的继续发生的事情。目前,调用例程可以安全地假设它只有在提供正确的凭据时才能获得控制checkCredentials
权。
但是,我想知道是否需要删除这些调用以充分利用 FastCGI。FCGI $req->Finish()
(或用于 HTTP::Engine 的 PSGI 中的等价物)是否足以替代?