freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

安全配置规范之Tomcat安全配置
2023-09-13 11:20:41

Tomcat安全配置规范

Tomcat服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。为避免Tomcat配置导致网络安全风险,现总结以下网络安全配置:

第一章 Tomcat启动安全配置

1.1 屏蔽tomcat默认管理控制台和管理账号密码

安全基线项目名称:Tomcat管理控制台及帐号管理安全基线要求项

安全基线项说明:

避免tomcat管理控制台对外开放,完全禁用对manager应用程序的访问,删除tomcat-users.xml禁止管理控制账号。如果有需要开启manager应用程序的访问,应该限制访问的IP地址为内部可信的地址,管理控制账号应按照用户角色配置,避免不同用户间共享账号。

安全配置步骤:

1、删除tomcat管理控制台和用户配置文件,参考如下配置操作

删除 tomcat/conf/tomcat-users.xml 配置文件用户与密码。

删除 tomcat/webapps/ 下manager和host-manager两个应用目录。

2. 如果需要保留tomcat管理控制台,则按如下操作:

(1)重命名tomcat管理控制台的目录,manager重命名<new_manager>,并且限制登陆内部IP地址,默认本机可访问:

<Context antiResourceLocking="false" privileged="true" >

<Valve className="org.apache.catalina.valves.RemoteAddrValve"

allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />

<Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>

</Context>

(2)tomcat-users.xml中配置用户名和对密码进行摘要的密文密码以及角色信息。

Realm标签可以放在Engine、Host或Context标签内部,用于提供用户认证信息。其中,密码可以使用明文或摘要式密码的形式

<Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"

digest="MD5"> </Realm>

1.2 删除tomcat不使用的样例文件和doc文件

安全基线项目名称:删除Tomcat冗余文件安全基线要求项

安全基线项说明:

删除Tomcat运行不需要的doc文件和样例文件等文件,这些文件对tomcat运行没有作用,增加了安全风险,使用tomcat应该删除这些冗余文件。

安全配置步骤:

1、可以直接删除下列Tomcat冗余目录及文件

删除 tomcat/webapp/doc/* 目录及该目录下的文件,该目录下是tomcat操作介绍文档。

删除 tomcat/webapp/examples/* 目录及该目录下的文件,该目录下是tomcat的程序样例文档。

删除 tomcat/webapp/ROOT/* 目录及该目录下的文件,ROOT是默认根目录,即访问 localhost:8080/,包含有关WEB的通用访问配置等。

2、可根据情况删除下来Tomcat冗余目录及文件,

根据规则1.1需要判断是否删除 tomcat/webapps/ 下manager和host-manager两个应用目录。host-manager和manager删除后会有日志告警,要消除,需要做如下操作:

tomcat/conf/logging.properties中删除部分配置:

  • handlers删除两项:

3manager.org.apache.juli.AsyncFileHandler,

4host-manager.org.apache.juli.AsyncFileHandler,


  • 下面该两项相关的也都删掉(注掉即可):

# 3manager.org.apache.juli.AsyncFileHandler.level = FINE

# 3manager.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs

# 3manager.org.apache.juli.AsyncFileHandler.prefix = manager.

# 3manager.org.apache.juli.AsyncFileHandler.maxDays = 90

# 3manager.org.apache.juli.AsyncFileHandler.encoding = UTF-8

# 4host-manager.org.apache.juli.AsyncFileHandler.level = FINE

# 4host-manager.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs

# 4host-manager.org.apache.juli.AsyncFileHandler.prefix = host-manager.

# 4host-manager.org.apache.juli.AsyncFileHandler.maxDays = 90

# 4host-manager.org.apache.juli.AsyncFileHandler.encoding = UTF-8

1.3 禁用tomcat的SSI和CGI功能

安全基线项目名称:禁用SSI和CGI不安全配置基线要求项

安全基线项说明:

SSI全称(Server Side Includes)是在HTML静态页面中使用的指令,当页面在服务端执行的时候是可以进行服务端解析的。在Tomcat里面实现SSI支持使用的是一个Servlet和一个Filter。CGI(通用网关接口)定义了一种 Web 服务器与外部内容生成程序的交互方式,这里所说的外部内容生成程序通常被称为 CGI 程序或 CGI 脚本。CGI 支持是通过 servlet 类 org.apache.catalina.servlets.CGIServlet 来实现的,一般对应的URL配置是“/cgi-bin/*”。Tomcat默认是不启用SSI和CGI。因为 SSI 和 CGI 都可以用于执行 Tomcat JVM 外部的程序,可以绕过 catalina.policy 中配置的安全策略,存在安全风险。

安全配置步骤:

Apache Tomcat版本9.0.x中禁用了SSI配置、CGI Servlet和enableCmdLineArguments选项。如果启用这些功能,存在运行外部程序的安全风险。

注释web.xml中的SSL配置:

<!-- NOTE: An SSI Filter is also available as an alternative SSI


<servlet>

<servlet-name>ssi</servlet-name>

<servlet-class>

org.apache.catalina.ssi.SSIServlet

</servlet-class>

<init-param>

<param-name>buffered</param-name>

<param-value>1</param-value>

</init-param>

<init-param>

<param-name>debug</param-name>

<param-value>0</param-value>

</init-param>

<init-param>

<param-name>expires</param-name>

<param-value>666</param-value>

</init-param>

<init-param>

<param-name>isVirtualWebappRelative</param-name>

<param-value>0</param-value>

</init-param>

<load-on-startup>4</load-on-startup>

</servlet>


-->

注释web.xml中的CGI配置:


<!--

<servlet>

<servlet-name>cgi</servlet-name>

<servlet-class>org.apache.catalina.servlets.CGIServlet</servlet-class>

<init-param>

<param-name>debug</param-name>

<param-value>0</param-value>

</init-param>

<init-param>

<param-name>cgiPathPrefix</param-name>

<param-value>WEB-INF/cgi</param-value>

</init-param>

<load-on-startup>5</load-on-startup>

</servlet>

-->


1.4 tomcat的shutdown端口和Connector端口安全配置

Tomcat提供一个默认监听端口8005,通过本地TCP/IP连接到该端口,发送shutdown请求命令,从而终止tomcat进程。如果黑客知道这个端口开启,很容易被用来关闭服务。Connector默认配置端口8080是http请求监听端口,8443默认是https请求监听端口,使用这些默认端口,很容易成为黑客的攻击对象,增加被攻击的风险。

  • 关闭或修改shutdown默认端口号并设置强密码

如果启用shutdown,修改tomcat/conf/server.xml中的shutdown端口为非默认值,并设置,例如<Server port="8005" shutdown="SHUTDOWN">修改为<Server port="8123" shutdown="SHUTDOWN-Command">

<Server port="8123" shutdown="SHUTDOWN-Command">

<Listener className="org.apache.catalina.startup.VersionLoggerListener" />

……

<Server port="8123" shutdown="SHUTDOWN-Command">配置表示将服务器的端口号设置为8123,并设置关闭服务器的命令为"SHUTDOWN-Command",该命令应该满足强密码原则。

禁用关闭功能:设置 port 属性为 -1,关闭shutdown port。

  • 修改Connector默认端口号

修改tomcat/conf/server.xml中的所有<connector>标签中端口配置为非默认值,对于每个找到的<connector>标签,将端口号修改为您想要的新值。例如,将<Connector port="8080">更改为<Connector port="8081">:

# port默认为8080,修改为8081

# redirectPort默认为8443,修改为9443

<Connector port="8081" protocol="org.apache.coyote.http11.Http11NioProtocol

connectionTimeout="20000"

redirectPort="9443" />


<Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol"

maxThreads="150" SSLEnabled="true"

maxParameterCount="1000"

/>

1.5 以安全管理模式运行Tomcat

安全基线项目名称:以安全管理模式运行tomcat要求项

安全基线项说明:

通过-security参数启动tomcat,则tomcat以安全管理模式运行,会自动加载tomcat/conf/Catalina.policy安全策略文件,服务可以根据需要对tomcat应用程序读取系统环境变量和执行敏感操作等进行授权。

除此之外,为了进一步增加安全性,建议使用专用用户(如tomcat或nobody用户)来启动Tomcat,并对Tomcat安装目录下的所有文件的属主和属组都设置为指定用户

安全配置步骤:

  • 修改policy安全策略文件,增加需要的安全策略:

java.io.FilePermission - 控制对文件和目录的读/写/执行访问

java.net.SocketPermission - 控制网络套接字的使用

java.net.NetPermission - 控制多播网络连接的使用

java.lang.reflect.ReflectPermission - 控制使用反射来进行类内省

java.security.SecurityPermission - 控制对安全方法的访问

  • 通过-security参数启动tomcat:

Linux环境:

> tomat_home/bin/start.sh -security

> tomat_home/bin/startup.sh -security

Windows环境:

> %tomat_home%\bin\catalina.bat start -security

> %tomat_home%\bin\ startup.bat -security

1.6 配置安全检查Security Lifestyle Listener

安全基线项目名称:配置Security Lifestyle Listener要求项

安全基线项说明:

SecurityListener监听器,在启动tomcat时做一些安全检查,如过检查不通过则会停止tomcat启动,tomcat默认是不启用SecurityListener,需要去除该注释,通过配置 org.apache.catalina.security.SecurityListener,您可以实现自定义的安全策略。例如,您可以定义哪些用户可以访问特定的 web 应用程序,或者限制对某些 URL 资源的访问。

安全配置步骤:

在 Tomcat 的配置文件(例如 server.xml)中,您可以通过添加以下属性来配置 org.apache.catalina.security.SecurityListener:

<Listener className="org.apache.catalina.security.SecurityListener"

securePagesWithPragma="true"

browserSecurePages="true"

minimumUmask="0007"

appContext-root-relative="web-app/security-config.xml"/>

其中,一些属性说明如下:

className:指定 org.apache.catalina.security.SecurityListener 的完全限定名。

securePagesWithPragma:如果设置为 true,则在每个受保护的页面上使用 Pragma 标头。这可以防止某些浏览器重定向到不受保护的页面。

browserSecurePages:如果设置为 true,则要求每个浏览器必须通过 SSL 进行通信。

minimumUmask:检查umask是否符合指定的最小限制(若未指定,则默认是0007)

appContext-root-relative:指定一个相对于应用程序上下文根目录的 XML 配置文件路径。该文件包含有关安全限制的详细信息。

1.7 配置STRICT_SERVLET_COMPLIANCE

安全基线项目名称:配置Security Lifestyle Listener要求项

安全基线项说明:

将STRICT_SERVLET_COMPLIANCE配置为true是Apache Tomcat的一个选项,用于更严格地遵循Servlet规范。当设置为true时,Tomcat将按照Servlet规范的要求执行某些操作,包括处理请求和生成响应。

将STRICT_SERVLET_COMPLIANCE设置为true可能会导致Tomcat在处理请求时的一些行为变化,包括但不限于以下几点:

  • 对于GET请求,Tomcat将遵循Servlet规范中关于处理GET请求的规则,包括处理URL中的查询参数和路径参数。
  • 对于POST请求,Tomcat将遵循Servlet规范中关于处理POST请求的规则,包括解析请求体中的表单数据和多部分表单数据。
  • 在生成响应时,Tomcat将遵循Servlet规范中关于设置响应头、响应状态码和响应体的规则。

安全配置步骤:

  1. 方法一要设置STRICT_SERVLET_COMPLIANCE为true,您可以在Tomcat的配置文件(通常是xml或server.xml)中添加以下配置:

xml<Context ...>
...
<Set name="strictServletCompliance">true</Set>
...
</Context>

请注意,具体的配置位置可能因Tomcat版本而异。此外,确保在重新启动Tomcat之前进行配置更改。

  1. 方法二在启动脚本中增加STRICT_SERVLET_COMPLIANCE设置,例如Linux环境在sh脚本中启动tomcat之前增加:

CATALINA_OPTS=“$CATALINA_OPTS -Dorg.apache.catalina. STRICT_SERVLET_COMPLIANCE=true”

CATALINA_OPTS是Tomcat中用于设置Java运行时选项的变量

1.8 配置内存泄露监听器JreMemoryLeakPreventionListener

安全基线项目名称:配置JreMemoryLeakPreventionListener监听器要求项

安全基线项说明:

JreMemoryLeakPreventionListener的作用是在Tomcat初始化时使用系统类加载器预先加载一些JRE的类和设置URLConnection缓存禁用属性,以避免线程上下文类加载器是Tomcat自定义的WebappClassLoader时,加载JRE导致的内存泄漏和URLConnection缓存导致的锁文件问题

安全配置步骤:

JreMemoryLeakPreventionListener的配置是在Tomcat的配置文件(例如server.xml)中进行的,配置方法如下:

<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />

只需在相应的<Listener>标签中添加className属性,并将属性值设置为org.apache.catalina.core.JreMemoryLeakPreventionListener 即可。

第二章 日志与文件目录配置操作

2.1 确保tomcat日志配置正确

安全基线项目名称:Tomcat审核登录安全基线要求项

安全基线项说明:

Tomcat的AccessLogValve用于创建日志文件,格式与标准的web服务器日志文件相同,设备应配置日志功能,对用户登录进行记录,记录内容包括用户登录使用的账号,登录是否成功,登录时间,以及远程登录时,用户使用的IP地址。

安全配置步骤:

编辑server.xml配置文件,在<HOST>标签中增加记录日志功能,将以下内容为tomcat9的默认配置:

<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" />

AccessLogValve可以配置的属性有:

className:必须被设置成org.apache.catalina.valves.AccessLogValve。

directory:存放日志文件的目录,可以是相对路径或者绝对路径,在tomcat下面有个logs文件夹,那里面是专门放置日志文件的,也可以修改为其他路径。确保该目录及文件只能由tomcat用户读写和执行。

prefix:日志文件前缀。

suffix:日志文件后缀。

pattern:日志输出模式,common方式时,将记录访问源IP、本地服务器IP、记录日志服务器IP、访问方式、发送字节数、本地接收端口、访问URL地址等相关信息在日志文件中。日志记录的模式为"%h %l %u %t "%r" %s %b",这是记录远程主机、远程用户、用户代理、请求方法、请求成功以及字节发送量等信息。

fileDateFormat:用来格式化日期,例如:"yyyy-MM-dd"。

resolveHosts:是否将IP地址解析为主机名。

2.2 tomcat日志配置文件处理器和日志级别

安全基线项目名称:Tomcat日志配置文件处理器和日志级别不低于FINE要求项

安全基线项说明:

Tomcat的conf目录下有一个logging.properties文件用于配置日志处理器(handler)、日志打印级别和设置控制台。logging.properties配置属性如下:

handlers:定义日志处理器。

org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level:设置日志级别。

org.apache.catalina.core.ContainerBase.[Catalina].[localhost].handlers:指定日志处理器。

java.util.logging.ConsoleHandler.level:设置控制台

安全配置步骤

在logging.properties配置日志处理器(handler),常用日志处理器有ConsoleHandler为控制台日志处理器,FileHandler为文件日志处理器,以下AsyncFileHandler用于异步地将日志信息写入文件。:

handlers = 1catalina.org.apache.juli.AsyncFileHandler, 2localhost.org.apache.juli.AsyncFileHandler,

3manager.org.apache.juli.AsyncFileHandler,

4host-manager.org.apache.juli.AsyncFileHandler,

java.util.logging.ConsoleHandler

指定日志处理器的不同的日志级别,级别不低于FINE:

1catalina.org.apache.juli.AsyncFileHandler.level = FINE

1catalina.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs

1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina.

1catalina.org.apache.juli.AsyncFileHandler.maxDays = 90

1catalina.org.apache.juli.AsyncFileHandler.encoding = UTF-8

以下\Tomcat的日志等级从低到高依次为:SEVERE(最高级别)> WARNING > INFO > CONFIG > FINE > FINER(精心)> FINEST(所有内容,最低级别):

FINEST:表示最详细的日志输出,包括debug日志信息。

FINER:详细信息,通常只在诊断问题时使用。

FINE:详细信息,通常只在诊断问题时使用。

CONFIG:配置信息。

INFO:信息性消息,如启动和关闭事件。

WARNING:警告信息,如未找到文件或请求处理过程中出现异常。

SEVERE:严重错误信息,如系统无法启动或关闭

2.3 设置tomcat合理的文件目录权限

安全基线项目名称:设置tomcat文件目录合理的权限要求项

安全基线项说明:

Tomcat相关目录及文件权限建议项如下,应用可以根据需要进行设置:

文件目录

目录权限

文件权限

描述

tomcat/conf

700

600

Conf目录下配置文件只有tomcat用户可以修改

tomcat/bin

700

*.sh:500

bin目录下的sh执行文件权限为500

其他:600

Bin目录下其他非可执行文件权限为600

tomcat/work

700

700

存放tomcat运行时的编译后文件

tomcat/temp

700

700

临时目录权限700

tomcat/logs

700

*.log:600

正在写入的日志文件600

其他:400

转储的日志文件为400

tomcat/webapps

550

440

程序文件只需要只读权限

第三章 认证与协议安全配置

3.1 禁用WebDAV协议功能

安全基线项目名称:禁止Tomcat开启WebDAV功能

安全基线项说明:协议功能安全基线要求项

WebDAV是一种基于HTTP协议的通信协议,用于在网络上进行文档管理和版本控制,Tomcat默认是支持WebDAV的,且默认为禁用状态,可以开启Tomcat的webdav作为文件存储服务器。如果WebDAV配置不当,攻击者就有可以匿名对网站内容进行修改、删除及上传任意文件等操作,这可能会导致攻击者完全控制目标WEB服务器。

安全配置步骤:

搜索web.xml中是否有webdav的servlet配置,如果有则删除配置:

<web-app>

...

<servlet>

<servlet-name>webdav</servlet-name>

<servlet-class>org.apache.catalina.servlets.WebdavServlet</servlet-class>

<init-param>

<param-name>mount</param-name>

<param-value>/webdav</param-value>

</init-param>

<load-on-startup>1</load-on-startup>

</servlet>

...

</web-app>

上述代码将创建一个名为webdav的Servlet,并将其映射到路径/webdav,启动tomcat可以通过访问http://localhost:{port}/webdav来访问Tomcat的WebDAV服务了。

3.2 信息传输的connector配置安全

安全基线项目名称:信息传输的connector配置安全要求

安全基线项说明:

https协议提供身份认证、数据加密和完整性保护等安全特性,在Connector元素中配置SSL连接是否开启,使用什么协议,连接的证书,线程配置等都要符合最佳实践。

安全配置步骤:

  • 要配置Apache Tomcat的Connector以启用SSL,执行以下步骤:

(1)获取SSL证书:您需要获取有效的SSL证书。您可以从受信任的证书颁发机构(CA)购买SSL证书,或者您也可以使用自签名证书进行测试目的。例如使用JDK自带的keytool工具生成一个证书

JAVA_HOME/bin/keytool  -genkey –alias tomcat –keyalg  RSA

-keystore /path/to/my/keystore

(2)配置SSL证书:将SSL证书添加到Tomcat的配置文件中。默认情况下,Tomcat在conf目录下的server.xml文件中配置Connector。

在server.xml文件中找到Connector配置部分,然后添加以下属性到要启用SSL的Connector中:

<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"

maxThreads="150" scheme="https" secure="true"

keystoreFile="/path/to/keystore" keystorePass="keystore_password"

clientAuth="false" sslProtocol="TLS"/>

在上面的配置中,您需要将/path/to/keystore替换为您实际的密钥库文件路径,并将keystore_password替换为密钥库文件的密码。添加SSLEnabled属性并设置为"true",表示启用SSL连接。

(3)配置密钥库和证书:如果您使用自签名证书或自定义证书,您还需要配置Tomcat使用正确的密钥库和证书。您可以将它们添加到Tomcat的conf目录下的server.xml文件中。

(4)配置正确scheme和secure,scheme属性用于设置协议的名称,在request.getScheme()时返回。默认值为"http",如果设置为"https",则表示该连接是SSL连接。secure属性用于指示是否调用request.isSecure()返回true。如果设置为true,表示该连接是SSL连接,需要使用安全认证。默认值为false。如果同时设置了scheme和secure属性,那么只有secure属性生效,因为secure属性是用于指示连接是否安全的标志。

  • 配置SSLHostConfig的SSL连接为安全协议:

在<SSLHostConfig>元素中指定安全协议protocols:

<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="100" compression="on" scheme="https" SSLEnabled="true" secure="true" defaultSSLHostConfigName="test.test">

<SSLHostConfig hostName="test.test" protocols="TLSv1.2, TLSv1.3">

<Certificate certificateFile="conf/cert.pem" certificateKeyFile="conf/privkey.pem" certificateChainFile="conf/chain.pem"/>

</SSLHostConfig>

</Connector>

在这个样例中,SSLHostConfig被用来配置一个名为test.test的主机,使用TLSv1.2, TLSv1.3协议。

  • 配置安全的加密套件

通过在<Connector>元素中添加cipherSuite属性,您可以指定Tomcat使用的加密套件。请确保您选择的加密套件与您的应用程序和服务器环境兼容。要配置Apache Tomcat以使用加密套件(cipher suite),您需要修改Tomcat的SSL配置文件。以下是一种常见的方法来配置Tomcat以使用特定的加密套件。

(1)找到<Connector>元素:在server.xml文件中,找到<Connector>元素,它定义了Tomcat的连接器配置。

(2)添加cipherSuite属性:在<Connector>元素中添加一个cipherSuite属性,并指定您想要使用的加密套件的名称。例如,要使用TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256加密套件,您可以这样设置:

<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"

maxThreads="150" scheme="https" secure="true"

keystoreFile="/path/to/keystore" keystorePass="keystore_password"

clientAuth="false" sslProtocol="TLS"

cipherSuite="TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"/>

请注意,您需要根据您的具体情况修改密钥库文件路径和密码,密码为加密口令(keystoreFile和keystorePass)。 (3).保存并关闭文件:保存对server.xml文件的更改,并关闭该文件。

以上步骤是https连接的安全配置要求。在实际部署中,您还需要考虑其他安全性设置,例如禁用SSL版本较旧的协议,确保遵循最佳实践。

3.3禁止使用不安全的Realms

安全基线项目名称:realms配置认证安全要求

安全基线项说明:

realms是Tomcat中用于提供安全认证的组件,它可以与各种数据源(如关系型数据库、LDAP目录服务器等)集成,以提供用户信息。Tomcat中不安全的realms主要包括以下几种:

MemoryRealm:从tomcat-user.xml中加载数据,数据变化时,需要重启Tomcat,不适用产品。

JDBCRealm:在用户认证鉴权时总是使用单线程工作,不适用产品。

UserDatabaseRealm:不适合大规模系统,只适合小型系统(若少量用户认证场景,可以使用此Realm)。

此外,不安全的realms还有JAASRealm等。在产品使用中,要避免使用不安全的realms,选择安全的Realm,如DataSourceRealm。

安全配置步骤:

以数据源域DataSourceRealm安全配置为例:

DataSource域和JDBCRealm 域的两者的不同是访问数据库的方式不一样:DataSourceRealm通过JNDI DataSource 来访问数据库;而JDBCRealm通过JDBC 驱动程序来访问数据库。DataSource域配置步骤︰

数据源的配置数据源的配置涉及修改server.xml文件。创建一个名为 jdbc/MyDB 的 DataSource,需要在server.xml中<GlobalNamingResources>元素下加入<Resource>元素:

<GlobalNamingResources>

<Resource name="jdbc/MyDB" auth="Container"

type="javax.sql.DataSource" driverClassName="org.h2.Driver"

url="jdbc:h2:tcp://localhost/&#126;/test" username="sa" password="sa"

maxTotal="20" maxIdle="10" maxWaitMillis="-1"/>

</GlobalNamingResources>

DataSourceRealm是Apache Tomcat服务器中的一个重要组件,它用于通过JNDI数据源进行身份验证和授权。以下是DataSourceRealm配置的样例:

<Realm className="org.apache.catalina.realm.DataSourceRealm"

driverName="com.mysql.jdbc.Driver"

connectionURL="jdbc:mysql://localhost:3306/mydatabase"

userTable="users" userNameCol="username" userCredCol="password"

globalUsersOnly="true"/>

配置属性介绍:

className:指定使用org.apache.catalina.realm.DataSourceRealm类。

driverName:指定JDBC驱动程序的名称。

connectionURL:指定连接数据库的URL。

userTable:指定存储用户信息的数据库表名称。

userNameCol:指定用户名所在的列名。

userCredCol:指定用户密码所在的列名

第4章 设备其他配置操作

4.1 会话管理安全配置

安全基线项目名称:会话管理安全配置要求项

安全基线项说明:

omcat中的会话管理是Web应用程序中一个重要的部分。会话配置主要是配置会话超时时间、是否启用会话跟踪以及会话数据存储方式等。

安全配置步骤参考:

  • 配置会话超时时间:

在Tomcat中,会话超时时间可以通过<session-config>元素进行配置。在Web应用程序的web.xml文件中,添加以下内容:

<session-config>

<session-timeout>10</session-timeout>

</session-config>


上述配置将会话超时时间设置为10分钟,一般会话超时设置该值,可以避免资源长时间占用。当会话超时后,用户的会话数据将被清除。

  • 禁用会话跟踪:

在Tomcat中,会话跟踪可以通过<track-states>元素进行配置。在Web应用程序的web.xml文件中,添加以下内容:

<track-states>

<track-state private="false"/>

</track-states>

上述配置将启用会话跟踪。如果将private属性设置为true,则将会话状态信息存储在单独的会话数据文件中,以保护敏感数据。

4.2 配置CorsFilter限制跨域访问

安全基线项目名称:配置CorsFilter限制跨域访问要求项

安全基线项说明

Tomcat上配置跨域资源共享(CORS),跨域资源共享(CORS)是一种允许当前域的资源被其他域的脚本请求访问的机制,通常由于同域安全策略(the same-origin security policy),浏览器会禁止这种跨域请求。

安全配置步骤参考:

(1)在web.xml中的<filter>标签中添加以下内容,其中<filter-name>是您为CORS过滤器选择的名称,<filter-class>是CORS过滤器的完全限定类名:

<filter>

<filter-name>CorsFilter</filter-name>

<filter-class>org.apache.catalina.filters.CorsFilter</filter-class>

</filter>

(2)在<filter-mapping>标签中,将<filter-name>与您想要进行CORS配置的URL模式进行映射。例如,如果您希望所有请求都受到CORS过滤,可以添加以下内容:

<filter-mapping>

<filter-name>CorsFilter</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

如果您只想为特定的URL模式添加CORS支持,可以更改<url-pattern>的值为您想要的URL模式。

(3)在<filter>标签中添加以下属性,这些属性定义了CORS的配置选项:

<init-param>

<param-name>cors.allowed.origins</param-name>

<param-value>*</param-value>

</init-param>

<init-param>

<param-name>cors.allowed.methods</param-name>

<param-value>GET,POST,PUT,DELETE,OPTIONS</param-value>

</init-param>

<init-param>

<param-name>cors.allowed.headers</param-name>

<param-value>Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers</param-value>

</init-param>

<init-param>

<param-name>cors.exposed.headers</param-name>

<param-value>Access-Control-Allow-Origin,Access-Control-Allow-Credentials</param-value>

</init-param>

<init-param>

<param-name>cors.support.credentials</param-name>

<param-value>true</param-value>

</init-param>

这些参数分别定义了CORS允许的来源、方法、请求头和暴露的响应头,以及是否支持凭据(例如,cookies)。您可以根据您的需求修改这些参数的值。

4.3 配置错误页面重定向

安全基线项目名称:Tomcat错误页面安全基线要求项

安全基线项说明:

Tomcat错误页面重定向,默认错误页面会泄露服务器相关信息,增加被攻击的风险。

安全配置步骤参考:

  • 在xml文件中找到<error-page>元素。在这个元素内,你可以配置不同的HTTP状态码或异常的错误页面,例如404配置:

<error-page>

<error-code>404</error-code>

<location>/404.html</location>

</error-page>

……………

<error-page>

<exception-type>java.lang.Exception</exception-type>

<location>/ error.html</location>

</error-page>

在这个例子中,当发生404错误时,Tomcat将会重定向到/error/404.html页面。

同样,你可以配置其他HTTP状态码或异常的错误页面。例如,对于500错误:

<error-page>

<error-code>500</error-code>

<location>/error/500.html</location>

</error-page>

(2)使用ErrorReportValve来定制出错信息

为隐藏详细的错误报告和服务器信息,需使用ErrorReportValve来定制出错信息,例如在<Host>标签中添加<Valve>标签,并将className属性设置为org.apache.catalina.valves.ErrorReportValve,将showReport和showServerInfo属性设置为false,并且配置状态码对应的错误页面,errorCode.0为没有配置错误页面的状态码默认指定的错误页面。这样可以隐藏详细的错误报告和服务器信息:

<Host name="localhost"  appBase="webapps"

unpackWARs="true" autoDeploy="true">


<Valve className="org.apache.catalina.valves.ErrorReportValve"

errorCode.404=”webapps/ROOT/404.html”

errorCode.0=”webapps/ROOT/errordefault.html”

showReport="false"

showServerInfo="false"/>

...

</Host>

如果你想要进一步定制错误报告,你可以创建一个自定义的Valve类并继承ErrorReportValve类,然后在其中重写需要定制的方法。这个自定义的Valve类需要添加到Tomcat的类路径中,以便Tomcat可以找到并使用它。

4.4 禁止开启程序自动部署功能

安全基线项目名称:Tomcat禁止开启程序自动部署功能要求项

安全基线项说明:

Tomcat允许在运行时自动部署应用程序,这个功能必须被禁用,因为它可能允许部署恶意或未经测试的应用程序。

安全配置步骤参考:

禁用自动部署的方法是在$CATALINA_HOME/conf/server.xml文件中做以下配置:

autoDeploy="false"

deployOnStartup="false"

在托管环境中Web应用程序可能不受信任,也可以设置deployXML属性为false来忽略context.xml,以防给该web应用程序提高权限。

4.5 请求头安全配置

安全基线项目名称:Tomcat请求头安全配置要求项

安全基线项说明:

Tomcat配置HTTPS安全头,不同的安全头有不同的安全加固作用,避免出现安全风险,例如X-XSS-Protection是HTTP响应头的一种,用于启动浏览器的反射型跨站脚本(XSS)过滤器。安全头分为安全请求头和响应头,主要是确保用户信息安全,防御恶意请求攻击,提高网站的可信度。

常见安全头:

[X-FRAME-OPTIONS]

这个header主要用来配置哪些网站可以通过frame来加载资源。它主要是用来防止UI redressing 补偿样式攻击。

Tomcat默认值:

sameorigin&nbsp;

[X-Content-Type-Options]

这个header主要用来防止在IE9、chrome和safari中的MIME类型混淆攻击。

Tomcat默认值:

nosniff

[X-XSS-Protection]

这个header主要是用来防止浏览器中的反射性xss。

OpenAS Tomcat默认值:

1; mode=block&nbsp;

[Content-Security-Policy]

这个header主要是用来定义页面可以加载哪些资源,减少XSS的发生。

Tomcat默认值:

script-src 'self'; default-src 'self'

[X-Download-Options]

这个header主要是用来判定IE浏览器是否允许直接打开下载的文件。

Tomcat默认值:

noopen

[Strict-Transport-Security]

这个header主要的作用是强制客户端(如浏览器)使用HTTPS与服务器创建链接,以减少会话劫持的风险。

Tomcat默认值:

max-age=31536000; includeSubdomains

4.6 目录列表访问限制

安全基线项目名称:Tomcat目录列表安全基线要求项

安全基线项说明

Tomcat默认是禁止目录列表显示的,如果配置了目录列表显示,建议禁止tomcat列表显示文件。

安全配置步骤参考:

编辑tomcat/conf/web.xml配置文件,通过设置元素的来为特定的Servlet设置这样的配置:

<servlet>

<servlet-name>MyServlet</servlet-name>

<servlet-class>com.yourdomain.YourServletClass</servlet-class>

<list-children>false</list-children> <!-- 这里设置禁止列表显示 -->

</servlet>

把true改成false,在这个配置中,我们添加了一个false元素,它将会禁止这个Servlet显示子目录的列表。

参考:https://www.jianshu.com/p/bc457e283aee

# web安全 # 安全规范
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录