1 部署升级

部署完成后,如何判定部署后的服务是正常可用的?

一般可按照以下步骤进行检测:

  • 观察tomcat启动过程中有没有错误提示?
    正常启动:

  • 打开日期最新的tomcat/logs/catalina.20xx-xx-xx.log文件,查看启动日志
    正常情况下,一般不会有警告和错误信息,如下图所示:

  • 访问乐创者门户登录页面

2 Tomcat安全漏洞及解决方案

【中危】Apache Tomcat样例目录session操纵漏洞

漏洞描述
Tomcat 在使用时一般直接下载源代码包,解压后直接使用。默认情况下,Tomcat 源码包 Web 根目录下包含 servlets-examples 和 tomcat-docs 目录,这些目录下的某些样例存在安全风险。
漏洞危害
例如,session 样例(/examples/servlets/servlet/SessionExample)允许用户对 session 进行操纵,可被黑客利用来绕过网站验证机制直接登录后台。
解决方案
Tomcat部署后,建议将其webapps目录下的自带应用全部删除掉。

【中危】易受攻击的javascript库


解决方案: 版本升级到v6.9.2,并手工删除lczServer/lczCommon/lib/jquery目录下的jquery.min.js文件即可。

注意:删除jquery.min.js后,乐创者所有Web前端功能将不再支持IE浏览器。

【低危】Tomcat信息泄露

漏洞描述
当使用默认配置安装Apache Tomcat时,还会安装几个示例文件。这些文件可能会泄露可能帮助潜在攻击者的敏感信息。
应用程序错误或警告消息可能会将有关应用程序内部工作的敏感信息暴露给攻击者,可能泄露敏感信息。该消息还可能包含产生未处理异常的文件的位置。
例如:


漏洞危害
这些文件或者报错页面可能会公开敏感信息,帮助恶意用户准备更高级的攻击。
解决方案
/$TOMCAT_HOME/webapps/ROOT目录下添加error.html文件。

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head>
<title>网页访问不了</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body class="error-404">
<div id="doc_main">

<section class="bd clearfix">
<div class="module-error">
<div class="error-main clearfix">
<div class="label"></div>
<div class="info">
<h3 class="title">网页访问不了</h3>
<div class="reason">
<p>可能的原因:链接地址错误或不存在。</p>
</div>
</div>
</div>
</div>
</section>
</div>

</body></html>

【低危】缺少Secure属性

漏洞描述
缺少secure属性, 由于会话cookie不包含“secure”属性,所以用户可以通过未加密的http协议传输Cookie或使用除http外的方法获取Cookie,可能造成用户信息被窃听。
漏洞危害
用户Cookie信息被窃听。
解决方案
你可以设置附加的secure标识来提示浏览器只能通过Https(加密方式)方式来传输cookie,Http(未加密方式)方式则不可以。
在web.xml中添加如下片段:

<session-config>
  <cookie-config>
    <secure>true</secure>
  </cookie-config>
</session-config>

【低危】X-Frame-Options 未配置

漏洞描述
X-Frame-Options HTTP响应头可以指示浏览器是否允许当前网页在“frame”或“iframe”标签中显示,以此使网站内容不被其他站点引用和免于点击劫持攻击。
漏洞危害
攻击者可利用此漏洞进行点击劫持攻击,如钓鱼或者诱导用户校园卡充值缴费等,具体危害具体分析。
解决方案
单机部署模式下,Apache tomcat 7.0.90和 tomcat 8以上都有HttpHeaderSecurityFilter,可以在tomcat下的conf里的web.xml中增加以下过滤器:
只允许同源:

<filter>
    <filter-name>httpHeaderSecurity</filter-name>
    <filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class>
    <init-param>
        <param-name>antiClickJackingEnabled</param-name>
        <param-value>true</param-value>
    </init-param>
    <init-param>
        <param-name>antiClickJackingOption</param-name>
        <param-value>SAMEORIGIN</param-value>
    </init-param>
    <async-supported>true</async-supported>
</filter>

<filter-mapping>
    <filter-name>httpHeaderSecurity</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
</filter-mapping>

或者
允许指定域名的:

<filter>
    <filter-name>httpHeaderSecurity</filter-name>
    <filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class>
    <init-param>
        <param-name>antiClickJackingEnabled</param-name>
        <param-value>true</param-value>
    </init-param>
    <init-param>
        <param-name>antiClickJackingOption</param-name>
        <param-value>ALLOW-FROM</param-value>
    </init-param>
    <init-param>
        <param-name>antiClickJackingUri</param-name>
        <param-value>https://baidu.com/</param-value>
    </init-param>
    <async-supported>true</async-supported>
</filter>

<filter-mapping>
    <filter-name>httpHeaderSecurity</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
</filter-mapping>

集群模式下,需要在nginx.conf文件添加【add_header X-Frame-Options SAMEORIGIN;】到 ‘http’, ‘server’或者 ‘location’ 的配置项中:

http{
    server{
        add_header X-Frame-Options SAMEORIGIN;

        location {/lczServer}/lczPortal {
            alias nginx安装目录/static{/lczServer}/lczPortal;
            try_files $uri $uri/ {/lczServer}/lczPortal/index.html;
            index index.html index.htm;
            add_header X-Frame-Options SAMEORIGIN;
        }
    }

}

3 其他常见问题

视屏播放出现ERR_CONTENT_LENGTH_MISMATCH

数智大屏等产品中引入比较大的视频资源时,偶尔会出现视频播放一段时间后,请求报ERR_CONTENT_LENGTH_MISMATCH错误。
错误原因:可能是 server.xml中配置了connectionTimeout导致。默认connectionTimeout为20s,如果配置了且又没有配置keepAliveTimeout的话,keepAliveTimeout的值和connectionTimeout保持一样。因此,建议Connector增加对keepAliveTimeout的配置:

keepAliveTimeout="120000"

keepAliveTimeout的值视具体情况而定,单位为毫秒。
keepAliveTimeout:表示在下次请求过来之前,tomcat保持该连接多久。这就是说假如客户端不断有请求过来,且为超过过期时间,则该连接将一直保持。

为什么视频文件容易出现以上问题?
Tomcat下,视频类资源支持断点续传,如果connectionTimeout时间配置太小,会导致下次请求还没有发起时,就超时了。

作者:柳杨  创建时间:2023-06-16 12:55
最后编辑:柳杨  更新时间:2025-04-22 15:31