【问题标题】:remove server header tomcat删除服务器头tomcat
【发布时间】:2012-06-21 14:00:14
【问题描述】:

我可以将 org.apache.coyote.http11.Http11Protocol.SERVER 的值重命名为其他任何值,因此 HTTP-Response-Header 包含类似以下内容:

服务器:Apache

而不是默认的

服务器:Apache-Coyote/1.1

对 org.apache.coyote.http11.Http11Protocol.SERVER 使用空值不会删除 Server-Header。

如何从我的响应中删除 Server-Header?

【问题讨论】:

    标签: http-headers tomcat7


    【解决方案1】:

    用于 Web 应用程序。 从代码中设置服务器标头。 它在 Java Spring boot 项目中对我有用。

    response.setHeader("Server", "none");
    

    如果部署在tomcat中,请尝试从代码中添加。

    【讨论】:

      【解决方案2】:

      如果您使用的是嵌入式 tomcat,那么您可以尝试以下代码。

      import org.apache.catalina.startup.Tomcat;
      
      final Tomcat server = new Tomcat();
      server.getConnector().setXpoweredBy(false);
      server.getConnector().setAttribute("server", "");
      

      【讨论】:

        【解决方案3】:

        简短答案 - 您无法删除标题,但您应该修改它(请参阅其他答案)。

        服务器标头在 RFC 中定义,它是强制性的。 (未在规范中定义为可选)

        取自http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.38

        14.38 服务器
        服务器响应头字段包含有关源服务器用于处理请求的软件的信息。
        该字段可以包含多个产品令牌(第 3.8 节)和 cmets 识别服务器和任何重要的子产品。这 产品代币按其重要性顺序列出 识别应用程序。

        如果响应是通过代理转发的,代理应用程序不得修改服务器 响应头。相反,它应该包含一个 Via 字段(如所述 在第 14.45 节中)。

          Note: Revealing the specific software version of the server might
          allow the server machine to become more vulnerable to attacks
          against software that is known to contain security holes. Server
          implementors are encouraged to make this field a configurable
          option.
        

        【讨论】:

        • 修改或删除服务器标头(以及 X-Powered-By 等其他标头)对于安全性很重要。通过向外部用户提供有关您的底层技术基础设施的信息,您实际上是在告诉潜在的攻击者他们应该利用哪些漏洞。与其他一些包含不同,tomcat 不允许您删除标题,但您可以将其修改为您想要的任何内容。 <Connector port="8080" server="Anything"/> 在 server.xml 中。另见:Tomcat docs
        • 服务器标头在 RFC 中定义,它是强制性的 为 false。如果它没有说是强制性的,那么它不会。
        【解决方案4】:

        您可以修改您的 tomcat server.xml 并添加“服务器”选项并将其设置为您想要的任何内容。应该为您正在运行的任何 http 或 ssl 连接器设置服务器选项。例如,下面是来自示例 server.xml 文件的示例 HTTP 连接器配置

        <Connector port="8080" protocol="HTTP/1.1"
                       connectionTimeout="20000"
                       redirectPort="8443" enableLookups="false" xpoweredby="false" server="Web"/>
        

        【讨论】:

          【解决方案5】:

          从 Tomcat 5.5 开始应该可以。看看这个讨论:https://mail-archives.apache.org/mod_mbox/tomcat-users/200508.mbox/%3C42FBE8AA.1060401@joedog.org%3E 这个链接: https://tomcat.apache.org/tomcat-4.1-doc/config/coyote.html

          因此,以下应将服务器标头设置为TEST。空应该使其为空。

          <Connector className="org.apache.coyote.tomcat4.CoyoteConnector" port="8180" inProcessors="5" maxProcessors="75" enableLookups="true" acceptCount="10" debug="0" connectionTimeout="20000" useURIValidationHack="false" server="TEST"/>
          

          在大多数情况下,将服务器标头设置为 Apache 在安全方面应该足够好。仅凭此,就无法推断出哪个操作系统或哪个模块的确切版本以及正在运行的模块的版本。

          【讨论】:

          • 我看不到您提供的链接如何帮助删除服务器标头
          • -1 这不能回答问题。 OP 已经知道如何更改 Server 标头;他们想知道的是是否可以删除它。
          • 您也可以将值设置为空字符串 (server="")。但是它不适用于静态文件(css、图像...),在这种情况下,您必须使用至少一个空格(server=""),否则会放在那里默认文本(Apache-Coyote/1.1)反而。确实,它并没有完全删除表头,表头还在,但值为空。
          猜你喜欢
          • 2021-06-29
          • 1970-01-01
          • 2016-05-23
          • 2010-11-13
          • 1970-01-01
          • 1970-01-01
          • 2017-07-11
          • 2018-04-04
          • 2021-05-06
          相关资源
          最近更新 更多