zoukankan      html  css  js  c++  java
  • tomcat安全配置之禁用Directory Listing

            什么是Directory Listing?通俗点讲,就是在webapp的目录下如果没有放置index.html或者类似的文件,如果从IE或者其它浏览器文章这个路径时,会惊喜的发现这个目录下的文件列表被输出到了页面上。使用书面语言来讲解专有词汇总是很麻烦的,不如实际操作一把。

            从apache的tomcat项目主页上新下载一个6.0.29版本的tomcat二进制发布包,在本地解压之后,手工在webapps目录下新建一个test目录,同时修改%CATALINA_HOME%confweb.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%confweb.xml,修改默认servlet的参数,把listings的值调整为false,关闭这个特性,或者自定义DefaultServlet类的实现,不允许从配置文件中读取listing属性的值,从源头关闭开启这个特性的可能;

    2、打开%CATALINA_HOME%libcatalina.jar文件,修改属性文件org/apache/catalina/util/ServerInfo.properties的内容,把server.info、server.number、server.built字段的取值全部调整为无意义的字符串。


  • 相关阅读:
    20210329 3. RocketMQ 高级实战
    20210329 2. RocketMQ 高级特性及原理
    20210329 1. RocketMQ 架构与实战
    20210329 0. RocketMQ 安装
    20210311 java.io.Serializable
    Multi-Agent Actor-Critic for Mixed Cooperative-Competitive Environments
    Reinforcement Learning in Continuous Time and Space
    A Learning Theory for Reward-Modulated Spike-Timing-Dependent Plasticity with Application to Biofeedback
    Functional Requirements for Reward-Modulated Spike-Timing-Dependent Plasticity
    BindsNET学习系列 ——Reward
  • 原文地址:https://www.cnblogs.com/suncoolcat/p/3299531.html
Copyright © 2011-2022 走看看