通过服务器端调用Perl时导致“suexec策略违规”的原因包括?

时间:2010-01-09 14:53:03

标签: perl apache suexec

我正在研究一个Perl脚本,该脚本是从Apache 2服务器上的服务器端调用的。该脚本显示通用的“内部服务器错误”页面,而不是显示实际错误。当我检查Apache错误日志时,我看到以下消息:

unable to include "/foobar/index.pl" in parsed file /home/foouser/domains/foosite.com/public_html/foobar/index.shtml, referer: http://www.foosite.com/foobar/
suexec policy violation: see suexec log for more details, referer: http://www.foosite.com/foobar/
Premature end of script headers: settings.pl, referer: http://www.foosite.com/foobar/

如何让Perl脚本显示错误而不是“内部服务器错误”?

更新

我本来应该问一个单独的问题,因为我已经知道这个 向浏览器发送错误(thanks brian):

use CGI::Carp qw(fatalsToBrowser);

但是,如果问题出在Apache配置而不是Perl脚本上,那么错误将不会发送到浏览器,因为没有解释Perl代码。在这种情况下,由于这一行,我们可以告诉我遇到Apache错误(而不是Perl错误):

 suexec policy violation: see suexec log for more details

当Apache以SUexec模式运行时(这似乎是共享主机通用),会发生这种情况。我不确定究竟是什么改变了导致这个错误,但这就是我想要找到的。

4 个答案:

答案 0 :(得分:16)

您可能正在使用共享托管,但由于您的脚本目录脚本文件具有除755之外的其他权限,因此您遇到此问题。

这是荷兰语翻译的一个case

答案 1 :(得分:6)

使用CGI::CarpfatalsToBrowser

 use CGI::Carp qw(fatalsToBrowser);

您可能还想查看我的Troubleshooting Perl CGI scripts

从错误消息中,我猜你不允许从服务器端包含执行CGI脚本。您运行的是哪个版本的Apache?如果它是旧的apache,请参阅the suexec docs for apache 1.3,或者如果它是较新的apache,请参阅the suexec docs for apache 2.0

答案 2 :(得分:2)

这不是为了用户友好,但通常为了安全起见,当用户无法对此做任何事情时,我们不会向用户显示确切的错误。例如,假设后端服务器不可用。作为用户,我可以在Web应用程序中做些什么来解决这个问题?

在某些情况下,错误消息将包含有用的信息,例如“SQL错误:非法语法。无法匹配”。如果用户在其输入中输入了引号,则此反馈将指示SQL注入漏洞。

其他良性外观的消息也很难向用户展示。攻击者想要的关键是要知道“发生了不同的事情”。如果应用程序为一个输入打印出一个错误,为另一个输入打印另一个错误,那么攻击者就会知道不同的错误,并且这是一个有趣的地方。

在生产站点中,应将错误记录到文件中,并且如果合适,可以通过Web界面下载 - 但要非常小心地清理浏览器的任何输出以避免跨站点脚本。并且应该没有用户提交的选项来在调试和生产之间重新配置它(不要通过POST或CGI参数控制它,而是通过配置文件选项控制它。)

答案 3 :(得分:0)

这可能是3个因素:

  1. 权限级别rwx设置错误(执行/写入级别)
  2. UUID / GUID与Apache设置不匹配
  3. 上述2的组合。
  4. 检查apache suexec + errorlog以获取详细信息