当前位置: 首页 > 编程日记 > 正文

Tomcat安全

一、版本安全

升级当前的tomcat版本为最新稳定版本。故名思议,最新稳定版本就要兼顾最新和稳定这两个概念。一个稳定的版本,是需要时间沉淀的,而最新又是相对于稳定版而言的最新。因此我们一般会选择当前大版本中,最新版本往前推几个版本或者往前推几个月出的版本。

目前,企业常用的tomcat大版本为6.0和7.0版本,8.0版本虽然已经出了很久了,但是仍然不建议使用。

在升级版本中,需要注意的事情有两点:

1、尽量避免跨大版本的升级

2、将当前老版本 tomcat 的server.xml、catalina.sh、web.xml和tomcat-users.xml文件进行备份,然后部署完新版本的 tomcat 之后,将这些配置文件覆盖过去即可,然后停掉旧版本,启动新版本即可完成升级操作。

二、隐藏版本信息

为了避免黑客针对某些版本进行攻击,因此我们需要隐藏或者伪装 Tomcat 的版本信息。

默认 Tomcat 的版本信息如下:

针对该信息的显示是由一个jar包控制的,该jar包存放在 Tomcat 安装目录下的lib目录下,名称为 catalina.jar。

我们可以通过 jar xf 命令解压这个 jar 包会得到两个目录 META-INF 和 org , 通过修改 org/apache/catalina/util/ServerInfo.properties 文件中的 serverinfo 字段来实现来更改我们tomcat的版本信息。

文件信息如下:

[root@localhost ~]#  cat org/apache/catalina/util/ServerInfo.properties |grep -v '^$|#'
server.info=Apache Tomcat/7.0.53 server.number=7.0.53.0 server.built=Mar 25 2014 06:20:16 当然,还有另外一种方法来实现隐藏或伪装Tomcat的版本信息,不过本质和上面一样,操作如下: [root@localhost ~]# cd /usr/local/apache-tomcat-7.0.53/lib [root@localhost lib]# mkdir -p org/apache/catalina/util [root@localhost lib]# cd org/apache/catalina/util [root@localhost util]# vim ServerInfo.properties server.info=hello world # 如果想修改成其它版本号,把这个地方的值改成其它值就行了

修改完毕之后,重启 Tomcat即可看到效果!

效果如下:

三、优化 web.xml

servlet与其它适用于整个Web应用程序设置的配置文件,必须符合servlet规范的标准格式。通过它可以配置你web应用的相关选项,tomcat在启动的时候会读取这个文件,完成你开发的系统的一些初始化操作。

它可以做如下事情:

1、提供基于 servlet 的相关配置

2、增加监听器,监控session或在tomcat启动时,加载一些你希望加载的资源。比如创建数据库连接池等等

3、设置session过期时间,tomcat默认是30分钟

4、更改应用的默认网页,常用为index.html/index.jsp等

5、增加过滤器,做一些你希望的过滤操作,比如敏感词汇的过滤

6、增加一些 jstl(标准标签库)的定义,方便在jsp中直接includ进来,直接使用这些标签

7、struts,spring或hibernate的一些配置等等

下面摘录下O'REILLY 的《Tomcat 权威指南》中的一段话:

web.xml 的文件格式定义在 Servlet 规范中,因此所有符合 Servlet 规范的 Java Servlet Container 都会用到它。当 Tomcat 部署应用程序时(在激活过程中,或加载应用程序后),它都会读取 通用的conf/web.xml ,然后再读取web应用程序中的 WEB-INF/web.xml 。其实根据他们的位置,我们就可以知道, conf/web.xml文件中的设定会应用于所有的web应用程序,而某些web应用程序的WEB-INF/web.xml中的设定只应用于该应用程序本身 。 
       如果没有WEB-INF/web.xml文件,tomcat会输出找不到的消息,但仍然会部署并使用web应用程序,servlet规范的作者想要实现一种能迅速并简易设定新范围的方法,以用作测试,因此,这个web.xml并不是必要的,不过通常最好还是让每一个上线的web应用程序都有一个自己的WEB-INF/web.xml,即使它只用做识别,但我想这是一个好的习惯。

由于Servlet规范主要是对于web程序员,而非系统管理员使用的。因此,对于运维来讲,我们可能更关心的是站点的默认网页、 自定义错误页面、禁止列目录等功能。

由于,正常生产环境中,肯定不会直接由tomcat对公网提供服务,前端肯定放的有apache或者nginx。因此,针对站点的默认主页和自定义错误页面,我们均在前端的apache或者nginx中做。另外,公司也可能交由程序猿在项目内的 WEB-INF/web.xml中去做定义。

在tomcat新版本中,自动默认已经禁止列目录功能。

下面,我列出几种常见功能,在web.xml中的表现形式:

站点默认主页:

自定义错误页面:

定义会话超时时间:

禁止列目录:

四、优化 tomcat-user.xml

该文件含有用户名、角色以及密码的清单文件。负责提供webapps下manager项目的登录认证管理。

在生产环境中,我们需要将该文件全部注释。

注释效果如下:

六、禁用 Tomcat 管理页面

我们线上是不使用 Tomcat 默认提供的管理页面的,因此都会在初始化的时候就把这些页面删掉。这些页面是存放在 Tomcat 安装目录下的webapps目录下的。

我们只需要删除该目录下的所有文件即可。

当然,还有涉及管理页面的2个配置文件 host-manager.xml 和 manager.xml 也需要一并删掉。这两个文件存放在 Tomcat 安装目录下的conf/Catalina/localhost目录下。

七、用普通用户启动 Tomcat

为了进一步安全,我们不建议使用 root 来启动 Tomcat。这边建议使用专用用户 tomcat 或者 nobody 用户来启动 Tomcat。

在启动之前,需要对我们的tomcat 安装目录下所有文件的属主和属组都设置为指定用户。

八、分离 Tomcat 和项目的用户

为了防止 Tomcat 被植入 web shell 程序后,可以修改项目文件。因此我们要将 Tomcat 和项目的属主做分离,这样子,即便被搞,他也无法创建和编辑项目文件。

相关文章:

Linux系统下给Qt应用程序配置图标(其余的应用程序也是可以实现添加图标的)

添加链接描述1.创建启动脚本 打开终端输入: touch run.sh在/home目录下找到run.sh文件,双击打开编辑; #!/bin/bash cd /execute/home/xxx/ #/home/xxx/是Release编译以后生成的应用程序的路径 ./Json2.创建d…

Unity完全学习教程-从初学者到C#中的RPG游戏开发

打造3款游戏&学习Unity实用方式!从基础开始,以一个RPG游戏结束。使用Unity 2020和C# 你会学到: 通过创建酷游戏的实用方法 游戏开发的基础和核心概念 创建一个拥有大量功能的角色扮演游戏 代码背后的数学解释。 要求 最基本的C#或其他面向对象语言…

2345电脑管家_极限挑战:同时安装4大国产杀毒软件,我的电脑是最安全的?

还没到国庆假期,老毛桃就提前给自己放了假,闲着就作妖,这不?现在就忙着卸载。人固有一秃,或秃于科研,或秃于卸载!说到作妖,是怎么一回事呢?此前不少网友私信让老毛桃挑战…

Sublime Text 3 及Package Control 安装(附上一个3103可用的Key)

一、Sublime Text 3 下载。 官方下载地址:http://www.sublimetext.com/ 二、Sublime Text 3 安装。 打开安装包,进行傻瓜式安装。 三、注册。 点击Help,选择Enter License,出现如下输入框。 输入注册码。 —– BEGIN LICENSE —–…

2022-2028年中国儿童医疗行业深度调研及投资前景预测报告

【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新(交付时间约3个工作日) 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国儿童医疗行业市场行业相关概述、中国儿童医疗行业市场行业运行环境、分析了中国儿童医疗行…

使用Spring的@Autowired 实现DAO, Service, Controller三层的注入(转)

简述: 结合Spring和Hibernate进行开发 使用Autowired实现依赖注入, 实现一个学生注册的功能,做一个技术原型 从DAO(Repository) -> Service -> Controller 目录结构: 使用Maven做本地包管理, pom.xml [java]view…

Ubuntu安装QT后无法输入中文怎么办?

文件目录打开: 文件位置/Qt5.12.6/Tools/QtCreator/lib/Qt/plugins/platforminputcontexts 查看是否存在libfcitxplatforminputcontextplugin.so库文件(第一次装肯定没有)放进去以后重新启动QT即可输入中文该库下载位置: ununtu…

Unity空间射击游戏开发教程

描述 在本课程中,您将学习如何在unity中制作一款太空射击游戏。本课程使用全新的特性和编码实践,并且兼容所有较新版本的unity。 了解如何使用世界领先的免费游戏开发工具Unity创建太空射击游戏。有了我们的在线教程,你会惊讶于创建这样一个…

43.放苹果(递归练习)

放苹果 总时间限制: 1000ms 内存限制: 65536kB 描述 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同…

怎么彻底删除电脑上的软件_你的电脑有救了:1 个神器几个进阶方法彻底删除流氓软件!...

如何彻底删除流氓软件?https://www.zhihu.com/video/1064189630747844608流氓软件不仅会拖慢电脑的运行速度,还有各种烦人的广告和弹窗。哪怕你通过常规方式把它卸载掉了,它依然会卷土重来。因为一般的卸载可能会有文件残留,如何彻…

2022-2028年中国儿童保健品行业市场研究及前瞻分析报告

【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新(交付时间约3个工作日) 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国儿童保健品行业市场行业相关概述、中国儿童保健品行业市场行业运行环境、分析了中国儿童保…

构造 Codeforces Round #302 (Div. 2) B Sea and Islands

题目传送门 1 /*2 题意:在n^n的海洋里是否有k块陆地3 构造算法:按奇偶性来判断,k小于等于所有点数的一半,交叉输出L/S4 输出完k个L后,之后全部输出S:)5 5 10 的例子可以是这样的&#xff…

QGC开发(一)---编译构建源码

编译构建源码编译信息下载QGC源码编译与构建编译信息 系 统:Ubuntu 16.04 QT 版 本:QT5.12.6 QGC版本:Stable_3.5.6下载QGC源码 下载连接: git clone https://github.com.cnpmjs.org/mavlink/qgroundcontrol.git -b St…

Unity 3D游戏开发学习教程

用C#用Unity3D制作游戏 你会学到: 您将学习3D游戏开发基础知识,以使用Unity3D引擎推进事物。 到本课程结束时,他们将可以轻松制作任何类型的游戏,无论是3D还是2D MP4 |视频:h264,1280720 |音频:AAC,44.1 KHz&#xf…

iphone照片永久删除怎么恢复_怎么恢复删除的照片?专业数据恢复软件轻松搞定...

怎么恢复删除的照片?照片相信对大家来说也都并不陌生,不管是旅游还是聚会,很多人往往也都会随手一拍,并将这些照片作为留恋。所以现在的生活中,用于拍照的设备也都越来越多,同时很多人对于所拍照片的清晰度…

知识点回顾-简单的TableView单组数据展示/多组数据展示

1 拖入TableView到UIView中,连线DataSource2 3 1.实现数据源方法4 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section5 {6 return ;7 }8 9 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSI…

2022-2028年中国多肽药物市场研究及前瞻分析报告

【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新(交付时间约3个工作日) 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国多肽药物行业市场行业相关概述、中国多肽药物行业市场行业运行环境、分析了中国多肽药物行…

第一次写,测试下

2015年5月11日转载于:https://blog.51cto.com/tdfly/1650342

【转】ubuntu下实用的三款录屏软件

转发链接:https://www.cnblogs.com/cherishry/p/5710612.html 适用于日常办公!

学习如何在AutoCad土木工程中绘制建筑设计图

学习如何在AutoCad中绘制建筑设计图从平面图到AutoCad土木工程中的整栋建筑 你会学到: 如何绘制房屋地图 如何绘制建筑设计 如何从AutoCad打印或出图 AutoCaD使用 AutoCaD命令使用 如何在2D Autocad中构建家庭或房屋地图(完整教程视频包括家庭地图、窗户、门、室内家具或物品、…

图像在计算机中通过什么方式表示_万物皆可“计算机视觉”

本文为 AI 研习社编译的技术博客,原标题 :How to do everything in Computer Vision作者 | George Seif翻译 | chesc、Disillusion、Ophria校对 | 邓普斯•杰弗 审核 | Lam-W 整理 | 菠萝妹原文链接:https://towardsdatascience.com/how-to-d…

2022-2028年中国电池制造行业市场供需规模及投资前景预测报告

【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新(交付时间约3个工作日) 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国电池制造行业市场行业相关概述、中国电池制造行业市场行业运行环境、分析了中国电池制造行…

Ubuntu14.04 64bit 编译安装nginx1.7+php5.4+mysql5.6

我的操作系统是Ubuntu14.04,其它linux系统的操作流程类似。 主要安装的软件是nginx1.7php5.4mysql5.6 1. 创建必要目录 sudo mkdir ~/setup sudo mkdir /opt/software sudo chmod 777 /opt/software 2. 下载必要软件 cd ~/Downloadswget http://am1.php.net/distrib…

QGC注释消息提示框

消息提示框:有时显示时覆盖想要看的界面,可注释!

学习编写Unity计算着色器 Learn to Write Unity Compute Shaders

利用图形处理器的力量 你会学到: 如何编写Unity计算着色器 如何在后处理图像过滤器中使用ComputeShaders 如何使用ComputeShaders进行粒子效果和群集 如何使用StructuredBuffers在计算着色器和实例表面着色器之间共享数据 使用计算机处理器处理流体模拟 使用计算机开发者创建物…

[重磅] 让HTML5达到原生的体验 系列之中的一个 避免切页白屏

非常多人都想、甚至曾使用HTML5开发跨平台App。而且想达到原生App的体验。最后的结果都是无奈的放弃。HTML5貌似美好,但坑太多。想做到原生App的体验差点儿不可为。 也曾有过著名的facebook放弃HTML5改用原生做App的事件。可是坑多不怕,就怕没人填。 本系…

测试中如何管理外包质量_如何从测试自动化中实现价值

如果几年前,质量管理部门都试图通过ROI指标来证明对测试的投资是合理的,那么现在情况发生了变化,是时候重新审视这个问题了。当实施连续测试,并且每天在不同的环境下以不同的角色运行多次测试自动化时,由于测量方法与以…

2022-2028年中国碘矿行业竞争格局分析及市场需求前景报告

【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新(交付时间约3个工作日) 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国碘矿行业市场行业相关概述、中国碘矿行业市场行业运行环境、分析了中国碘矿行业市场行业的…

centos下axel安装与使用

一、获得Axel32位系统:wget -c http://www.centoscn.com/tool/axel-2.4-1.el5.rf.i386.rpm rpm -ivh axel-2.4-1.el5.rf.i386.rpm #安装64位系统:wget -c http://www.centoscn.com/tool/axel-2.4-1.el5.rf.x86_64.rpm rpm -ivh axel-2.4-1.el5.rf.x86_64…

Qt编译PX4源码,参考如下进行配置

参考链接: https://blog.csdn.net/qq_38768959/article/details/106822491如单独打开一个的话可以选择打开仿真编译套件,如需下载则选择下载套件!