什么是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的更多相关文章

  1. Tomcat记录-tomcat常用配置详解和优化方法(转载)

    常用配置详解 1 目录结构 /bin:脚本文件目录. /common/lib:存放所有web项目都可以访问的公共jar包(使用Common类加载器加载). /conf:存放配置文件,最重要的是serv ...

  2. tomcat常用配置详解和优化方法

    tomcat常用配置详解和优化方法 参考: http://blog.csdn.net/zj52hm/article/details/51980194 http://blog.csdn.net/wuli ...

  3. 企业级Tomcat部署配置

    1.1 Tomcat简介 Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache.Sun和其他一些公司及个人 ...

  4. tomcat 安全配置文档

    1.配置文档中使用$CATALINA_HOME变量声明为tomcat的安装目录并明确写出了tomcat的配置文件路径,此路径为测试环境的路径,线上系统对应配置文件的路径可能不一样,在进行相关配置时,应 ...

  5. (转)tomcat 安全配置文档

    原文:https://www.cnblogs.com/heaven-xi/p/9961354.html 1.配置文档中使用$CATALINA_HOME变量声明为tomcat的安装目录并明确写出了tom ...

  6. JNDI和在tomcat中配置DBCP连接池 元数据的使用 DBUtils框架的使用 多表操作

    1 JNDI和在tomcat中配置DBCP连接池 JNDI(Java Naming and Directory Interface),Java命名和目录接口,它对应于J2SE中的javax.namin ...

  7. Springmvc +JNDI 在Tomcat下 配置数据源(转)

    一.             简介 jndi(Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API.命名服务 ...

  8. 在Tomcat中配置连接池和数据源

    1.DataSource接口介绍 (1)DataSource 概述 JDBC1.0原来是用DriverManager类来产生一个对数据源的连接.JDBC2.0用一种替代的方法,使用DataSource ...

  9. Tomcat 参数配置相关

    Tomcat参数配置相关 by:授客 QQ:1033553122 目的: 对Tomcat配置的点滴学习总结,主要目的在于分析Tomcat与性能相关的一些参数设置,以便性能调优时选择最优配置   环境: ...

随机推荐

  1. C# 、winform 添加皮肤后(IrisSkin2) label设置的颜色 无法显示

    C# .winform 添加皮肤后(IrisSkin2) label设置的颜色 无法显示 解决方法一:设置label的Tag属性值与skinEngine的DisableTag属性值相同即可.默认值是9 ...

  2. nodejs概论(实操篇)

    什么是模块? 模块分为原生模块(node.jsAPI提供的原生模块,在启动时已经被加载)和 文件模块(动态加载模块,主要由原生模块module来实现和完成.通过调 用node.js的require方法 ...

  3. Hibernate 持久化对象的状态

    持久化对象有3种状态:1.持久化状态      2.临时状态      3.游离状态 Session 的特定方法能使对象从一个状态转换到另一个状态临时对象(transient)•    在使用代理主键 ...

  4. jQuery图片滑动

    一个非常简单实用的jQuery插件 可以用在页面的顶部广告展示 http://slidesjs.com/ 一个需要注意的问题, 就是在手机等客户端(IOS8以上), 使用此插件时, 经常会触发插件的r ...

  5. mysql一个表中多个字段对应另一个表的id如何查询?

    比如有如下2个表 a 和baaID b1ID b2ID b3ID1 1 3 52 2 4 6bbID bCon1 苹果2 香蕉3 国内4 国外5 出口6 进口其中a表中的b1ID,b2ID,b3ID都 ...

  6. sqlserver中Profiler的使用

    1.单击开始--程序--Microsoft SQL Server 2008--性能工具--SQL Server Profiler,如下图:                  2.然后进入SqlServ ...

  7. Hibernate的查询语言之HQL(一)——快速入门

    Hibernate提供异常强大的查询体系,使用Hibernat有多种查询方式可以选择:即可以使用Hibernate的HQL查询,也可以使用条件查询,甚至可以使用原生的SQL查询语句.不仅如此, Hib ...

  8. 重构前的程序:通过rsync命令抓取日志文件

    基本概况: 我有一台服务器每天每个小时都会生成一个日志文件,这些日志文件会被保留2天,超过2天会被一个程序压缩放到备份目录,日志文件的文件名是有命名要求的,例如:project_log.2013010 ...

  9. xilinx FPGA普通IO作PLL时钟输入

    本帖转自于 :http://www.cnblogs.com/jamesnt/p/3535073.html 在xilinx ZC7020的片子上做的实验; [结论] 普通IO不能直接作PLL的时钟输入, ...

  10. 转:搭建Hive的图形界面

    原文来自于:http://blog.csdn.net/w13770269691/article/details/17353595 今天想使用一下Hive的图形化工具HWI,我的Hive是0.12.0版 ...