Apache:包含虚拟 SSI 不适用于 CGI 脚本

Apache:包含虚拟 SSI 不适用于 CGI 脚本

.html我在名为test.html...的文件中具有以下服务器端包含内容...

<!--#include virtual="/cgi-bin/myScript.cgi"-->

<!--#include virtual="/includes/myFile.html"-->

当我test.html在浏览器中查看实时内容时,myFile.html插入/渲染都很顺利,但是myScript.cgi却给了我

[在执行此命令时出现的错误]


  • 从浏览器地址栏来看,/cgi-bin/myScript.cgi呈现输出正常,证明文件存在于路径中并且权限正确(755)。

  • SSI 处理程序设置正确,并且myFile.html包含得很好,证明该页面正在被解析。

那么如果 SSI 正在运行并且正在运行,为什么这个脚本myScript.cgi却不运行呢?#include virtual

顺便说一句,这是在 cPanel 托管帐户上,我在同一托管公司的服务器上有许多其他帐户(网站),配置相同。其他的都按预期运行。

  • cPanel 版本:11.30.6(版本 3)
  • Apache 版本:2.2.17
  • 架构:x86_64
  • 操作系统:linux
  • Perl 版本:5.8.8
  • 内核版本:2.6.18-194.32.1.el5
  • cPanel 专业版: 1.0 (RC1)

该脚本只是以格式化文本的形式返回从今天日期开始的年份。输出前面带有Content-type: text/html\n\n,它不是新的 Perl 脚本。它正在其他帐户上运行。

答案1

我的托管公司将问题上报给 cPanel,但令我尴尬的是,最终发现是我的.htaccess文件中的一个设置缺失了。

正常运行的帐户有此行,而损坏的帐户却没有......

Options All -Indexes

All,默认情况下,包括托管公司为了使其正常运行而添加的内容......

Options +Includes +ExecCGI

如果没有+ExecCGI,它就会中断,正如我在原始帖子中描述的那样。

答案2

很好的故障排除,发现您的 SSI 正常工作。
您已将问题定位到 CGI 子系统。

首先,您需要确保已在文件中设置此项.htaccess

Options ExecCGI

如果问题仍然存在,您需要查看错误日志来找出原因:

此错误消息与 500 错误相同(通常是 .htaccess 本身的错误所导致的),因此您可以在日志中找到描述性错误消息。

cPanel 允许您查看错误日志。

他们是你最好的朋友。

在错误日志部分,cPanel 将在顶部显示您正在寻找的客户端 IP 地址。这是您的 ISP 分配的 IP 地址。

现代版本的 cPanel(比如我在 Bluehost 使用的版本,2017 年 11 月)会突出显示来自客户端的条目,这样黑客攻击就不会分散您的注意力。如果您没有突出显示,请使用浏览器的 Ctrl-F(查找)功能来查找来自您的条目。

请参阅本回答末尾的一个例子,了解他们处理的所有黑客攻击行为。让他们处理这些攻击比自己在野外运行服务器更值得。


解答:我认为您对 CGI 的使用<!--#Include存在问题。

大多数现代 Apache 服务器需要您使用:

<!--#exec cgi="/cgi-bin/myScript.cgi" -->

而不是简单地包含脚本。

==> 确保您的 HTML 文件具有.shtm.shtml扩展名。


请注意,所有/cgi-bin/文件都需要具有 755 权限。- 这意味着所有者具有 RWX 权限,而组和公共具有 RX 权限

chmod 755 /cgi-bin/*

===> 永远不要授予它们或 .htaccess 文件 777 权限,否则外部人员可以轻松更改它们。


这表明了为什么使用托管服务比运行自己的服务器更好。

黑客攻击的示例日志输出,大部分被 RBL 阻止:

在此处输入图片描述

相关内容