Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是什么原因引起的;suexec违反政策”的规定;当通过服务器端调用Perl时,包括?_Perl_Apache_Suexec - Fatal编程技术网

是什么原因引起的;suexec违反政策”的规定;当通过服务器端调用Perl时,包括?

是什么原因引起的;suexec违反政策”的规定;当通过服务器端调用Perl时,包括?,perl,apache,suexec,Perl,Apache,Suexec,我正在编写一个Perl脚本,它是从Apache2服务器上的服务器端include调用的。脚本显示的是一般的“内部服务器错误”页面,而不是实际的错误。当我查看Apache错误日志时,我看到以下消息: unable to include "/foobar/index.pl" in parsed file /home/foouser/domains/foosite.com/public_html/foobar/index.shtml, referer: http://www.foo

我正在编写一个Perl脚本,它是从Apache2服务器上的服务器端include调用的。脚本显示的是一般的“内部服务器错误”页面,而不是实际的错误。当我查看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脚本显示错误而不是“内部服务器错误”

更新: 我应该就此提出一个单独的问题,因为我已经了解到这确实会将错误发送到浏览器():

但是,如果问题出在Apache配置而不是Perl脚本上,那么错误将不会发送到浏览器,因为Perl代码没有被解释。在本例中,我们可以看出我遇到了Apache错误(而不是Perl错误),原因如下:

 suexec policy violation: see suexec log for more details
当Apache在SUexec模式下运行时会发生这种情况(这对于共享主机来说似乎很常见)。我不确定到底是什么改变了导致了这个错误,但这正是我想要找出的。

使用的
fatalsToBrowser

 use CGI::Carp qw(fatalsToBrowser);
你可能也想看看我的


从错误消息中,我猜您不允许从服务器端执行CGI脚本。您正在运行哪个版本的Apache?如果是旧的apache,请参阅;如果是新的apache,请参阅。

这不是为了用户友好,而是为了安全,当用户对此无能为力时,我们通常不会向用户显示确切的错误。例如,假设后端服务器不可用。作为一个用户,我可以做些什么来修复您的web应用程序中的问题

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

其他看起来不错的消息也不利于向用户显示。攻击者想要知道的关键是“发生了一些不同的事情”。如果应用程序为一个输入输出一个错误,为另一个输入输出另一个错误,那么攻击者知道发生了一些不同的错误,这是一个值得关注的地方


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

您可能正在使用共享主机,而出现此问题的原因是您的脚本目录脚本文件没有
755
之外的其他权限


这里有一个荷兰语译本。

这可能是三个因素:

  • 权限级别rwx设置错误(执行/写入级别)
  • UUID/GUID与Apache设置不匹配
  • 以上2项的组合

  • 查看ApacheSuexec+errorlog了解详细信息

    在本例中,显示“内部服务器错误”没有其他原因,只是没有人告诉服务器做任何不同的事情。创建一个定制的500处理程序同样容易,它只会说“糟糕的事情发生了,我们已经通知了当局”。这应该是一个评论而不是一个答案吗?@Nick Bolton:我对这是一个评论还是一个答案持不同意见。作为一个答案,我基本上是说,“不要这样做”——这不是OP想要的答案,但我也不认为这是一个无效的答案。作为一个评论,我将被限制在600个字符以内,并且无法适应整个响应(是的,我可以将其分为两个响应,但是如果某些部分被选中,而其他部分没有,事情就很难跟进)。我认为响应是两个缺点中较小的一个。我们使用的是Apache2(我相当肯定)。有趣的是,它以前是工作的;我相信我们可以执行CGI脚本。它只是停止工作,因为在我开始故障排除之前做了一些更改(我不确定是什么),但我相信这涉及到重新洗牌目录结构和更改一些
    .htaccess
    文件。我尝试添加
    Options+ExecCGI
    ,但似乎没有帮助。您的问题是关于显示错误消息,这与解决导致错误的问题有点不同。你接受了一个你没有问的问题的答案。也许你应该问另外一个问题。对不起,布莱恩,你是对的。我搞砸了。
     use CGI::Carp qw(fatalsToBrowser);