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与性能相关的一些参数设置,以便性能调优时选择最优配置 环境: ...
随机推荐
- jquery $.each遍历json数组方法
<!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/ ...
- WPF Binding
winform有binding, WPF也有binding,区别在哪呢?这里暂时不提.以前也检查接触WPF binding, 但为什么过段时间就忘记了呢? 可能主要原因自己的知识体系不够完善吧,下面我 ...
- javaScript 手写图片轮播
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 你好,C++(10)这次的C++考试你过了没有?C++中表示逻辑判断的布尔数据类型
3.4 布尔类型 在日常生活中,我们除了需要使用int类型的变量表示216路公交车:需要使用float类型的变量表示西红柿3.5元一斤,有时候还需要表示一种数据,那就是逻辑状态: “这次的C++考试 ...
- 二十分钟弄懂C++11 的 rvalue reference (C++ 性能剖析 (5))
C++ 11加了许多新的功能.其中对C++性能和我们设计class的constructor或assignment可能产生重大影响的非rvalue reference莫属!我看了不少资料,能说清它的不多 ...
- 《JavaScript dom 编程艺术》 placeholder占位符IE8兼容办法。
在<JavaScript dom 编程艺术>第11章学来的. 相对于用JavaScript替换文本框的提示语句 <!DOCTYPE html> <html lang=&q ...
- Css 描点
<!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8& ...
- python中的几种遍历列表的方法比较
python的内容非常丰富,给我们带来的便利很多,很多事情的表达方法有很大的多样性,比如我经常需要遍历一个列表,取它的下标和值,这个时候就有很多方法需要取舍一下才行. for循环遍历 l = [1,2 ...
- C++学习笔记2——引用
1. int ival = 1; int &refVal = ival; //引用必须初始化,且类型严格匹配 2. int ival = 1; int &refVal = ival; ...
- 温故而知新 C++基本类型
C++基本类型大小: 在32位计算机中测试得到:sizeof(bool) == 1sizeof(char) == 1 sizeof(short) == 2sizeof(int) == 4sizeof( ...