SSI 输出消失后您应用安全修补程序

文章翻译 文章翻译
文章编号: 318176 - 查看本文应用于的产品
本文已归档。它按“原样”提供,并且不再更新。
我们强烈建议所有用户都升级到 IIS 7.0 版 Microsoft Internet Information Services Microsoft Windows Server 2008 上运行。 IIS 7.0 大大提高了 Web 基础结构安全。有关 IIS 的详细信息与安全相关的主题,请访问下面的 Microsoft 网站:
http://www.microsoft.com/technet/security/prodtech/IIS.mspx
有关 IIS 7.0 的详细信息,请访问下面的 Microsoft 网站:
http://www.iis.net/default.aspx?tabid=1
展开全部 | 关闭全部

本文内容

症状

通过使用该 执行服务器端包含 (SSI) 程序时 <!--#exec cgi--> 正在运行任一 Microsoft Windows NT 4.0 Service Pack 4 (SP4) 或更高版本的服务器上的命令应用于或程序的输出不会出现在页上 Microsoft Windows 2000 Service Pack 2 (SP2) 或更高版本应用。如果未修补的服务器运行在同一个程序按预期效果显示输出。

原因

应用这些指定的 service pack 后,Internet Information Services (IIS) 需要使用该 执行任何 SSI 程序 <!--#exec cgi--> 遵循通用网关接口 (CGI) 规范的命令。此规范要求 CGI 程序打印其他任何输出前一个内容类型的 HTTP 标头。IIS 无提示地忽略此标头,并将其从它显示在页上的最后一个程序输出中删除。如果 SSI 程序不包括此标头,IIS 执行程序,但不显示任何相应的输出。这是 windows 的从以前版本的不需要这些标头,其中显示任何包含的 HTTP 标头之前从 SSI 程序输出的其余页上的行为的更改。

解决方案

您可以进行输出出现在两种方法之一:
  1. 通过使用该 执行程序 <!--#exec cmd--> 命令而不是,<!--#exec cgi--> 命令。 -或者-

  2. 重新编写该程序打印其他任何输出前的两个新行后跟在以下行:
    内容类型: 文本/html

状态

此行为是设计使然。

更多信息

若要能够 ssi 请按照下列步骤操作:
  1. 启动 Internet 服务管理器 (ISM),它加载 IIS 的管理单元的 Microsoft 管理控制台 (MMC)。
  2. 在 MMC 中双击您的计算机名称,在左窗格中。
  3. 双击要为其启用 SSI 的网站。
  4. 用鼠标右键单击将包含已启用 SSI 的文件的虚拟目录。若要启用 SSI 的 Web 站点的主目录,用鼠标右键单击 Web 站点。
  5. 单击 属性,然后单击 主目录 选项卡。
  6. 执行权限 下,单击以选中 脚本和可执行文件
  7. 单击 确定。请确保选中包含 继承覆盖 屏幕中的已启用 SSI 的文件的任何目录。有关如何启用的其他信息在 <!--#exec cmd 命令,--> 单击以下文章编号,以查看 Microsoft 知识库中相应的文章:
    233969默认情况下 SSIEnableCmdDirective 设置为 FALSE

重现行为的步骤

  1. 启用服务器端包含的默认 Web 站点的主目录。
  2. 编译下面的 C 程序未修补的 Windows NT 4.0 或 Windows 2000 服务器上:
    #include <stdio.h>
    int main(int argc, char **argv) {
      printf("Hello World\n");
    
    }
  3. 命名 Helloworld.exe,该可执行文件,然后将文件放在您的 Web 服务器的根目录。默认状态下,该目录是 C:\Inetpub\Wwwroot。
  4. 创建下面的已启用 SSI 的 HTML 页和 Web 服务器的根目录中然后将页面保存为 Ssitest.shtm:
    <HTML><BODY>
    Exec cmd: <!--#exec cmd="c:\inetpub\wwwroot\HelloWorld.exe"--><BR>
    Exec cgi: <!--#exec cgi="/HelloWorld.exe"-->
    </BODY></HTML>
  5. 浏览到运行 Windows NT 4.0 Service Pack 3 (SP3) 的计算机上的 http://localhost/ssitest.shtm 或更早版本或 Windows 2000 Service Pack 1 (SP1) 或更早版本。请参阅以下:
    Exec cmd: Hello World
    Exec cgi: Hello World
  6. 应用 Windows NT 4.0 SP4 或更高版本或 Windows 2000 SP2 或更高版本到计算机。
  7. 再次浏览 http://localhost/ssitest.shtm。现在,您看到以下:
    Exec cmd: Hello World
    Exec cgi:
  8. 修改 Helloworld.exe 首先,打印一个内容类型标头的代码,然后重新编译文件:
    #include <stdio.h>
    int main(int argc, char **argv) {
      printf("Content-type: text/html\n");
      printf("Hello World\n");
    
    }
  9. 重新加载 http://localhost/ssitest.shtm 计算机上的运行 Windows NT 4.0 SP4 或更高版本或 Windows 2000 SP2 或更高版本。现在,您看到以下:
    Exec cmd: Content-type: text/html
     Hello World
    Exec cgi: Hello World
    注意的与该 不同 <!--#exec cgi--> 命令,该 <!--#exec cmd--> 命令不能从输出中删除任何 CGI 标头。

参考

有关 ssi 的详细信息,请参阅 IIS 联机文档中的"服务器端包含"主题。要查看此主题、 定位 管理、 找到 网站管理,然后找到 服务器端包含。安装 IIS 文档与可通过以下 URL 从任何计算机访问 IIS 联机文档:
http://localhost/iishelp

属性

文章编号: 318176 - 最后修改: 2013年10月24日 - 修订: 3.1
这篇文章中的信息适用于:
  • Microsoft Internet Information Services 5.0
  • Microsoft Internet Information Server 4.0
关键字:?
kbnosurvey kbarchive kbmt kbpending kbprb KB318176 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 318176
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com