欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

如何加强Tomcat 9的安全性?

最编程 2024-08-07 17:15:14
...

Apache Tomcat 9 (9.0.53) - Security Considerations

NUM 加固内容 说明 备注
1 补丁安装 使用最新版本tomcat
2 目录权限 修改tomcat目录权限为运行用户
3 运行权限 运行tomcat的用户不能是root
4 删除项目无关文件和目录 删除webapps/下目录
5 删除控制台 在tomcat-users.xml中停用所有用户 tomcat-users.xml
6 Shutdown Port server.xml
7 禁止自动部署 server.xml
8 开启访问日志记录 localhost_access_log server.xml
9 系统Banner 隐藏telnet判断信息,隐藏http请求错误信息 server.xml ,catalina.jar
10 禁用http方法 禁用PUT 、DELETE 等危险的HTTP方法 web.xml
11 禁止目录浏览 web.xml
12 错误页面 404报错,java.lang.NullPointerException报错 web.xml
13 Website Icon 不是安全问题,影响不大,没有的话部分浏览器有报错 favicon.ico
14

5. 删除控制台

在tomcat-users.xml中停用所有用户,默认就没开

6. Shutdown Port and Command

推荐加固方式:

<Server port="18005" shutdown="stop">

另一种方法:
还可以设置port属性为 -1,关闭 shutdown port

<Server port="-1" shutdown="SHUTDOWN">

关闭后,bin/shutdown.sh 就失效了,提示SEVERE: No shutdown port configured. Shut down server through OS signal. Server not shut down.

7. 禁止自动部署 (在运行的Tomcat部署应用)

将host节点的autoDeploy属性设置为“false”
如果存在deployOnStartup属性,也将其更改为“false”

    <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="false">

8. 开启访问日志记录

server.xml
默认就有如下配置,不用修改

     <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

9. 系统Banner

  1. 禁止Tomcat在Response Header返回server信息
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000"  
enableLookups="false" redirectPort="8443" server="Application Server"  />

server="" 也行

  1. 隐藏error page返回

server.xml
https://tomcat.apache.org/tomcat-9.0-doc/config/valve.html#Error_Report_Valve
修改Error_Report_Valve属性为false,解决报错泄露
添加好host部分

<valve classname="org.apache.catalina.valves.ErrorReportValve" showreport="false" showserverinfo="false"/>

web.xml
修改DefaultServlet 配置 showServerInfo 属性为false

或者,创建文件CATALINA_BASE/lib/org/apache/catalina/util/ServerInfo.properties,内容为:

server.info=Application Server

或者

进入 apache-tomcat-9.0.53/lib/ 目录,执行如下:

jar xf catalina.jar org/apache/catalina/util/ServerInfo.properties

如上会从catalina.jar解压org/apache/catalina/util/ServerInfo.properties文件,文件内容如下:

[root@VM_1_5_centos lib]# cat org/apache/catalina/util/ServerInfo.properties  |grep -v '#'

server.info=Apache Tomcat/9.0.53
server.number=9.0.53.0
server.built=Sep 6 2021 19:09:00 UTC

修改server.infoserver.number

执行如下,将org/apache/catalina/util/ServerInfo.properties打包进catalina.jar

jar uf catalina.jar org/apache/catalina/util/ServerInfo.properties

10. 禁用http方法

编辑web.xml 文件中配置,将readonly 的param-value值设为true (默认为true)
org.apache.catalina.servlets.DefaultServlet的

        <init-param>
            <param-name>readonly</param-name>
            <param-value>true</param-value>
        </init-param>

添加如下

  <!-- == HTTP METHOD Restricted == -->
    <security-constraint>
        <web-resource-collection>
            <web-resource-name>restricted methods</web-resource-name>
            <url-pattern>/*</url-pattern>
            <http-method>HEAD</http-method>
            <http-method>PUT</http-method>
            <http-method>DELETE</http-method>
            <http-method>OPTIONS</http-method>
            <http-method>TRACE</http-method>
        </web-resource-collection>
        <auth-constraint/>
    </security-constraint>

https://www.ibm.com/docs/en/odm/8.10?topic=methods-restricting-use-http
https://www.acunetix.com/blog/web-security-zone/http-security/

11. 禁止目录浏览

conf/web.xml
将listings的值设置为false (默认为 false)。

        <init-param>
            <param-name>listings</param-name>
            <param-value>false</param-value>
        </init-param>

12. 错误页面

conf/web.xml
web-app添加子节点:

  <!-- == Error Pages == -->
    <error-page>
        <error-code>403</error-code>
        <location>/403.html</location>
    </error-page>

    <error-page>
        <error-code>404</error-code>
        <location>/404.html</location>
    </error-page>

    <error-page>
        <error-code>500</error-code>
        <location>/500.html</location>
    </error-page>

    <error-page>
        <exception-type>java.lang.NullPointerException</exception-type>
        <location>/error.</location>
    </error-page>

在webapps目录下创建ROOT/404.html,定义自定义错误信息。范例如下:

<!doctype html>
<html lang="zh-cn">
<head>
  <meta charset="utf-8" />
  <title>HTTP状态 404 - 未找到</title>
  <style type="text/css">body {font-family:Tahoma,Arial,sans-serif;text-align: center; padding: 50px; background-color:#2d2d2d; color:#fff;} h1, h2, h3, b {color:white;background-color:#525D76;} h1 {font-size:22px;} h2 {font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a {color:black;} .line {height:1px;background-color:#525D76;border:none;}</style>
</head>
<body>
  <h1>HTTP状态 404 - 未找到</h1>
  <hr class="line" />
  <p><b>描述</b> 源服务器未能找到目标资源的表示或者是不愿公开一个已经存在的资源表示。</p>
  <hr class="line" />
  <h3>Application Server</h3>
</body>
</html>

13. Change the Website Icon

添加 64*64 的LOGO到 <Tomcat_Home>/webapps/ROOT/favicon.ico