我正在Perl脚本,这是从一个服务器侧包括在Apache2个服务器。脚本是显示一般的"内部服务器错误"的网页而不是表示我的实际错误。当我检查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脚本,以显示一种错误,而不是"内部服务器错误"?

更新:

我应该问一个单独的问题,因为因为我已经学会了这个 发送错误的浏览器(谢谢你布莱恩):

use CGI::Carp qw(fatalsToBrowser);

但是,如果问题是与Apache配置,而不是Perl脚本,然后该错误不会被发送到浏览器,因为Perl代码不是正在解释。在这种情况下,我们可以告诉大家,我遇到一个Apache错误(而不是一个Perl错误),因为这一行:

 suexec policy violation: see suexec log for more details

这发生在阿帕奇正在SUexec模式(这似乎是普遍共同主办)主办。我不知道究竟是什么已经改变导致这一错误,但是这就是我试图找出来。

有帮助吗?

解决方案

也许你们使用共享主机和你有这样的问题,因为你 脚本目录脚本文件 不会有其他权利,比 755.

这里是一个 情况下 译自荷兰。

其他提示

使用 CGI ::鲤鱼fatalsToBrowser

 use CGI::Carp qw(fatalsToBrowser);

您可能也想看看我的故障排除的Perl CGI脚本的。

从错误消息,我猜则不允许执行CGI脚本从服务器端包含。哪个版本的Apache的,你运行?如果它是一个古老的Apache,请参见对Apache 1.3 ,或者如果suexec的文档它是一个较新的apache的,请参阅 suexec的文档的Apache 2.0

这不是用户友好性,但往往为了安全,我们不向用户显示确切的错误时,用户不能做任何事情。例如,假设一个后端服务器不可用。我能,作为用户,如何解决,在你的web应用程序?

在某些情况下,错误消息将包含有用的信息,如“SQL错误:非法语法不匹配“”。如果用户输入了在它们的输入报价,这个反馈将指示SQL注入漏洞。

其他良性期待的消息都是坏的展现给用户,以及。攻击者想要的关键是要知道“不同的东西发生了。”如果应用程序打印出一个错误的一个输入,而另一个错误另一个iinput,那么攻击者知道不同的东西出了问题,并认为这是集中一个有趣的地方。

在生产现场,错误应该被记录到文件,并且,如果合适的话,可下载通过Web界面 - 但要非常小心,消毒任何输出到浏览器,以避免交叉站点脚本。并且应该有调试和生产(不通过POST或CGI参数控制它,而是由配置文件的选项)。

之间重新配置此没有用户提交的选项

这可能是3因素:

  1. 权限等级rwx设置错误的(执行/writeness级)
  2. Usb驱/GUID不匹配设置Apache
  3. 2同上。

检查apache suexec+错误日志的细节

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top