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