tomcat安全配置之禁用Directory Listing
什么是Directory Listing?通俗点讲,就是在webapp的目录下如果没有放置index.html或者类似的文件,如果从IE或者其它浏览器文章这个路径时,会惊喜的发现这个目录下的文件列表被输出到了页面上。使用书面语言来讲解专有词汇总是很麻烦的,不如实际操作一把。
从apache的tomcat项目主页上新下载一个6.0.29版本的tomcat二进制发布包,在本地解压之后,手工在webapps目录下新建一个test目录,同时修改%CATALINA_HOME%\conf\web.xml文件,启用directory list特性,样例配置如下。
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
启动tomcat,然后使用IE访问http://localhost:8080/test,会看到什么?理论上讲,会发现test目录里的内容出现在了IE页面上,这个是不是很神奇,不需要登录Web应用所在的服务器就可以查看路径下的文件信息。另外一个惊喜是Tomcat的版本号信息也被输出到了页面上,吼吼,这下是不是可以做很多事情咯。
看过Directory Listing的现象之后,似乎没有什么特别的危害,test目录里没有多少文件,也没什么特别有意义的信息,那么为什么6.0.29版本的tomcat会默认关闭这个特性呢?根据官方文档和实践经验看,这个选项的危害体现在如下几点:
1、如果对用户的操作做特别的控制的话,开启Directory Listing会暴露一些用户不必要、不应当看到的信息,相当于是无意中为访问者开启了刺探信息的窗口;
2、输出目录内文件列表的操作本身对应用的影响可大可小,如果目录内恰巧没什么文件,可能对应用影响不大;但如果目录内有大量的文件,比如几千至几万,这时单纯执行ls都会很慢,可想而知由tomcat来输出类似信息的页面会占用多少资源了。如果web应用存在这样的目录,并被恶人都知,只要多找几台机器,写个脚本,脚本里多开几个线程,短时间内反复访问这个目录的URL,就会对web应用产生很大的压力,占用过多的资源,进而导致正常用户的访问受到影响;
3、开启Directory Listing之后,页面在输出目录内文件列表清单时,还会顺便输出Tomcat的版本号,这又给恶人提供了重要的信息。版本信息定义在catalina.jar的属性文件org/apache/catalina/util/ServerInfo.properties中,对于6.0.29版本来说,版本信息默认如下
server.info=Apache Tomcat/6.0.29
server.number=6.0.0.29
server.built=July 19 2010 1458
。。。。
限于经历和经验,Directory Listing的危害目前只能列举这么多。下面列举出整改的方法。
1、修改配置文件%CATALINA_HOME%\conf\web.xml,修改默认servlet的参数,把listings的值调整为false,关闭这个特性,或者自定义DefaultServlet类的实现,不允许从配置文件中读取listing属性的值,从源头关闭开启这个特性的可能;
2、打开%CATALINA_HOME%\lib\catalina.jar文件,修改属性文件org/apache/catalina/util/ServerInfo.properties的内容,把server.info、server.number、server.built字段的取值全部调整为无意义的字符串。
tomcat安全配置之禁用Directory Listing的更多相关文章
- Tomcat记录-tomcat常用配置详解和优化方法(转载)
常用配置详解 1 目录结构 /bin:脚本文件目录. /common/lib:存放所有web项目都可以访问的公共jar包(使用Common类加载器加载). /conf:存放配置文件,最重要的是serv ...
- tomcat常用配置详解和优化方法
tomcat常用配置详解和优化方法 参考: http://blog.csdn.net/zj52hm/article/details/51980194 http://blog.csdn.net/wuli ...
- 企业级Tomcat部署配置
1.1 Tomcat简介 Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache.Sun和其他一些公司及个人 ...
- tomcat 安全配置文档
1.配置文档中使用$CATALINA_HOME变量声明为tomcat的安装目录并明确写出了tomcat的配置文件路径,此路径为测试环境的路径,线上系统对应配置文件的路径可能不一样,在进行相关配置时,应 ...
- (转)tomcat 安全配置文档
原文:https://www.cnblogs.com/heaven-xi/p/9961354.html 1.配置文档中使用$CATALINA_HOME变量声明为tomcat的安装目录并明确写出了tom ...
- JNDI和在tomcat中配置DBCP连接池 元数据的使用 DBUtils框架的使用 多表操作
1 JNDI和在tomcat中配置DBCP连接池 JNDI(Java Naming and Directory Interface),Java命名和目录接口,它对应于J2SE中的javax.namin ...
- Springmvc +JNDI 在Tomcat下 配置数据源(转)
一. 简介 jndi(Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API.命名服务 ...
- 在Tomcat中配置连接池和数据源
1.DataSource接口介绍 (1)DataSource 概述 JDBC1.0原来是用DriverManager类来产生一个对数据源的连接.JDBC2.0用一种替代的方法,使用DataSource ...
- Tomcat 参数配置相关
Tomcat参数配置相关 by:授客 QQ:1033553122 目的: 对Tomcat配置的点滴学习总结,主要目的在于分析Tomcat与性能相关的一些参数设置,以便性能调优时选择最优配置 环境: ...
随机推荐
- scrolView
禁止UIScrollView垂直方向滚动,只允许水平方向滚动 scrollview.contentSize = CGSizeMake(长度, 0); 禁止UIScrollView水平方向滚动,只允许 ...
- MySQL DELETE
MySQL DELETE 语句 你可以使用 SQL 的 DELETE FROM 命令来删除 MySQL 数据表中的记录. 你可以在mysql>命令提示符或PHP脚本中执行该命令. 语法 以下是S ...
- [转]Java中byte与16进制字符串的互相转换
Java中byte用二进制表示占用8位,而我们知道16进制的每个字符需要用4位二进制位来表示(23 + 22 + 21 + 20 = 15),所以我们就可以把每个byte转换成两个相应的16进制字符, ...
- Hive学习之二 《Hive的安装之自定义mysql数据库》
由于MySQL便于管理,在学习过程中,我选择MySQL. 一,配置元数据库. 1.安装MySQL,采用yum方式. ①yum install mysql-server,安装mysql服务端,安装服 ...
- 【USACO 3.1.1】最短网络
[描述] 农民约翰被选为他们镇的镇长!他其中一个竞选承诺就是在镇上建立起互联网,并连接到所有的场.当然,他需要你的帮助. 约翰已经给他的农场安排了一条高速的网络线路,他想把这条线路共 ...
- 【POJ1753】Flip Game
[题目大意] 有一个4x4规格的一个棋盘,现在有16个一面黑一面白的棋子分布在这个棋盘上. 翻转一个棋子能够使它以及它上下左右的四个棋子从黑变白,从白变黑. 现在问你至少要经过多少次操作才能够使得整个 ...
- STL容器介绍
STL的容器可以分为以下几个大类: 一:序列容器, 有vector, list, deque, string. 二 : 关联容器, 有set, multiset, map, mulmap, h ...
- scrapy1.1入门用例简介
今天将scrapy安装成功,测试了下,倒腾了好长时间,才倒腾成功,特此分享. 其实最好的老师就是scrapy的帮助文档,只要把文档看懂,照着做,也就啥都会儿了! 帮助文档下载见http://downl ...
- jquery获取浏览器的高度和宽度
<script type="text/javascript"> $(document).ready(function() { alert($(window).heigh ...
- 【学习笔记】【oc】指针
1.取一个变量的值,可通过直接与间接的方式 直接:访问变量 间接:通过变量的内存地址来获取变量的值. 存放内存地址的变量就是指针变量. 2.定义指针变量的语法:类型* 变量名 &:取地址运算符 ...