美文网首页
tomcat CGI支持

tomcat CGI支持

作者: 与狼共舞666 | 来源:发表于2022-08-30 17:42 被阅读0次

    目录

    介绍

    CGI(通用网关接口)定义了一种 Web 服务器与外部内容生成程序交互的方式,这些程序通常被称为 CGI 程序或 CGI 脚本。

    在 Tomcat 中,当您使用 Tomcat 作为 HTTP 服务器并需要 CGI 支持时,可以添加 CGI 支持。通常,当您不想运行像 Apache httpd 这样的 Web 服务器时,这会在开发过程中完成。Tomcat 的 CGI 支持在很大程度上与 Apache httpd 兼容,但有一些限制(例如,只有一个 cgi-bin 目录)。

    CGI 支持是使用 servlet 类实现的 org.apache.catalina.servlets.CGIServlet。传统上,这个 servlet 映射到 URL 模式“/cgi-bin/*”。

    默认情况下,在 Tomcat 中禁用 CGI 支持。

    安装

    注意- CGI 脚本用于执行 Tomcat JVM 外部的程序。如果您使用的是 Java SecurityManager,这将绕过您的安全策略配置catalina.policy.

    要启用 CGI 支持:

    1. $CATALINA_BASE/conf/web.xml默认文件中有 CGI servlet 的注释掉的示例 servlet 和 servlet-mapping 元素。要在 Web 应用程序中启用 CGI 支持,请将 servlet 和 servlet-mapping 声明复制到WEB-INF/web.xmlWeb 应用程序的文件中。

      取消注释文件中的 servlet 和 servlet-mapping $CATALINA_BASE/conf/web.xml可以同时为所有已安装的 Web 应用程序启用 CGI。

    2. 为您的 Web 应用程序设置privileged="true"Context 元素。

      只有被标记为特权的上下文才允许使用 CGI servlet。请注意,修改全局$CATALINA_BASE/conf/context.xml 文件会影响所有 Web 应用程序。有关详细信息,请参阅 上下文文档

    配置

    有几个 servlet 初始化参数可用于配置 CGI servlet 的行为。

    • cgiMethods - 逗号分隔的 HTTP 方法列表。使用这些方法之一的请求将被传递给 CGI 脚本,以便脚本生成响应。默认值为GET,POST。用于 *脚本处理所有请求,无论方法如何。除非被此参数的配置覆盖,否则使用 HEAD、OPTIONS 或 TRACE 的请求将由超类处理。
    • cgiPathPrefix - CGI 搜索路径将从 Web 应用程序根目录 + File.separator + 此前缀开始。默认情况下没有值,这会导致将 Web 应用程序根目录用作搜索路径。推荐值为 WEB-INF/cgi
    • cmdLineArgumentsDecoded - 如果启用了命令行参数(通过enableCmdLineArguments)并且 Tomcat 在 Windows 上运行,则每个单独的已解码命令行参数必须匹配此模式,否则请求将被拒绝。这是为了防止将命令行参数从 Java 传递到 Windows 的已知问题。这些问题可能导致远程代码执行。有关这些问题的更多信息,请参阅 Markus Wulftange 的博客和Daniel Colascione的存档 博客。
    • cmdLineArgumentsEncoded - 如果启用命令行参数(通过enableCmdLineArguments)单个编码的命令行参数必须匹配此模式,否则请求将被拒绝。默认值与 RFC3875 定义的允许值匹配,并且是 [a-zA-Z0-9\Q%;/?:@&,$-_.!~*'()\E]+
    • enableCmdLineArguments - 命令行参数是否根据 3875 RFC 的第 4.4 节从查询字符串生成?默认值为 false.
    • environment-variable--为 CGI 脚本的执行环境设置的环境。变量名取自参数名。要配置名为 FOO 的环境变量,请配置名为 environment-variable-FOO 的参数。参数值用作环境变量值。默认是没有环境变量。
    • executable - 用于运行脚本的可执行文件的名称。如果您的脚本本身是可执行的(例如 exe 文件),您可以显式将此参数设置为空字符串。默认为 perl
    • executable-arg-1 , executable-arg-2等等 - 可执行文件的附加参数。这些在 CGI 脚本名称之前。默认情况下没有额外的参数。
    • envHttpHeaders - 一个正则表达式,用于选择作为环境变量传递给 CGI 进程的 HTTP 标头。请注意,标头在匹配之前会转换为大写,并且整个标头名称必须与模式匹配。默认为 ACCEPT[-0-9A-Z]*|CACHE-CONTROL|COOKIE|HOST|IF-[-0-9A-Z]*|REFERER|USER-AGENT
    • parameterEncoding - 与 CGI servlet 一起使用的参数编码的名称。默认为 System.getProperty("file.encoding","UTF-8")。这是系统默认编码,如果该系统属性不可用,则为 UTF-8。
    • passShellEnvironment - 是否应该将来自 Tomcat 进程(如果有)的 shell 环境变量传递给 CGI 脚本?默认为 false
    • stderrTimeout - 在终止 CGI 进程之前等待 stderr 读取完成的时间(以毫秒为单位)。默认为2000

    执行的 CGI 脚本取决于 CGI Servlet 的配置以及请求如何映射到 CGI Servlet。CGI 搜索路径从 Web 应用程序根目录 + File.separator + cgiPathPrefix 开始。然后 搜索pathInfo,除非它是null- 在这种情况下搜索servletPath

    搜索从第一个路径段开始,一次扩展一个路径段,直到没有留下路径段(导致 404)或找到脚本。任何剩余的路径段都将传递给 PATH_INFO环境变量中的脚本。

    相关文章

      网友评论

          本文标题:tomcat CGI支持

          本文链接:https://www.haomeiwen.com/subject/qszlnrtx.html