分层架构web容器的配置安全

转自:http://hi.baidu.com/shineo__o/item/7520d54c24d234c71081da82

/ps:本以为这是一个偶然配置失误造成的问题,但最近几天无聊时测试发现,有此类似问题的站点就有上百个,所以在这里粗糙总结一下!

通常我们会碰到这样一个问题,在某个web容器中部署的应用的敏感信息是禁止直接访问的,但需要两个web容器搭配使用时,由于安全意识的疏忽,导致前者的私密信息能够通过http访问到,一个很简单的问题(可能大家也经常碰到),但经常容易被部署人员忽视,前段时间测试发现此类问题的站点还不少,其中不乏一些大型站点。

先看这张图:

发现Tomcat容器下应用的WEB-INF文件夹下能够被访问到?

上面是使用了Nginx + Tomcat容器分层,做了反向代理。

Nginx由于性能好、配置简单、且基本不需要软件成本;

Tomcat基本同上,但Tomcat有个缺点,处理静态文件性能低下。

综合一系列原因,对于一些创业型的或降低成本的互联网公司,都会选择j2ee及两者作为网站web容器层架构首选(优点还有很多,这里就不去讨论它)。

首先,看看截图:

以上只是导致这一问题,两个典型Nginx配置的case(其他场景也比较多)。

原因:在Nginx访问转接中配置了root(访问的容器),通常是整个应用的根路径,因为这样方便把静态文件交给Nginx来处理,就这么简单。

先看看应用文件中的WEB-INF文件夹安全说明:http://baike.baidu.com/view/1745468.htm  (熟悉j2ee的就不多说了!)

在Tomcat容器中,所有应用的WEB-INF文件夹是不能通过页面直接访问的。因为这个文件夹下信息重要,危害看看下面的一个case:

http://www.wooyun.org/bugs/wooyun-2010-07329

其他同样问题的站点应用(另外其他有此问题的站点就不一一介绍了!):

http://www.wooyun.org/bugs/wooyun-2010-07760

由于j2ee架构的特性,导致了整个应用层的暴露!

当然,我们会通过Nginx的简单配置解决这个问题:

但Nginx的这项配置绝对不是为了j2ee的安全问题而制订的这一项安全规范。

同样的问题在Apache + Tomcat的分层结构中也出现了。

我想说的是,这一问题只是在web容器搭配使用中,在j2ee的特性方面体现由为明显的安全问题。那其他语言或其他容器中了?更或者在其他两个或多个规范中,我们是否更要注意这些敏感信息的保护了?

简单地说,一个规范的隐私问题如何在另一个规范中得到有效保护?

那么这一问题应该算是谁的安全问题或者说谁该负责了?

不好说,设计标准中“松耦合”这一词用得真好,谁愿意去主动承担更多的责任?

但从Nginx + Tomcat中,个人认为是Nginx,因为Tomcat在整个web容器分层架构中权重要低!

要做更高层的产品就必须去兼容(让这一问题成为Nginx 默认安全配置项,毕竟WEB-INF文件夹对于j2ee来说太重要了!)底层产品(当然要看这一高层产品是怎么去描述自己的)!

时间: 2024-08-04 15:15:35

分层架构web容器的配置安全的相关文章

基于纯Java代码的Spring容器和Web容器零配置的思考和实现(3) - 使用配置

经过<基于纯Java代码的Spring容器和Web容器零配置的思考和实现(1) - 数据源与事务管理>和<基于纯Java代码的Spring容器和Web容器零配置的思考和实现(2) - 静态资源.视图和消息器>两篇博文的介绍,我们已经配置好了Spring所需的基本配置.在这边博文中,我们将介绍怎么使用这些配置到实际项目中,并将web.xml文件替换为一个Java类. 我们使用Java代码来配置Spring,目的就是使我们的这些配置能够复用,对于这些配置的复用,我们采用继承和引入来实现

UI5-文档-2.5-开发混合Web容器

开发混合Web容器 您可以将移动应用程序开发为混合应用程序,该混合应用程序由本机应用程序包装程序(例如PhoneGap)和HTML查看器组成,用于在用户界面上显示内容. 混合应用程序的优点是可以在应用程序商店中发布它们.另外,通过将应用程序代码和SAPUI5库文件嵌入到混合容器中,用户只需要安装文件一次,而不需要每次启动应用程序时都下载它们.但是库的大小变得很重要,因为每个用户都必须安装文件,而在web应用程序中,库部署在服务器上,用户只需要在运行时下载库的必要部分. 要在混合应用程序中包含所需

web容器(01):Apache配置监控

响应时间长可能原因: 硬件.应用服务器.网络.负载机.中间件线程池排队.数据库连接池排队.sql语句.jvmGc.代码逻辑 如何分析: 分析系统架构节点 开发在日志中打印方法在调用时消耗的时间 web容器:Nginx apache tomcat resin weblogic websphere apache:处理静态资源性能好些,处理servlet这样的动态请求性能会差些 tomcat:处理动态请求性能会好些 apache: 1.通渠配置文件httpd.conf 1)位置: yum安装:/etc

1、Web容器的理解&amp;Tomcat的安装与配置

Web容器的理解 <Java Web开发实战经典——基础篇>一书中对Web容器这一概念阐述得很好,借用其观点对Web容器加以理解: 想要运行一个Java Web的程序,则必须有相应的Web容器支持,因为所有的动态页面的程序代码都要在Web容器中执行,并将最后生成的结果交付给用户使用. 服务器端使用Web服务插件接受客户端的http请求,并对用户请求加以判断,判断其是动态请求还是静态请求.如果是静态请求,则直接通过Web服务器从文件系统中取得相应的文件,并通过http协议返回到客户端浏览器:如果

IOC容器在web容器中初始化——(一)两种配置方式

参考文章http://blog.csdn.net/liuganggao/article/details/44083817,http://blog.csdn.net/u013185616/article/details/52186184. 最近在研究IOC容器在web容器中初始化的过程.阅读了源码,参照了很多文章,在这里记录一下. 使用的web容器为tomcat7.spring的jar包为4.3.7.RELEASE版本. 我们可以通过web.xml配置文件web容器中声明spring容器.有以下两

2、设计Web Api分层架构

一.创建Model层 using System; namespace SCM.API.MODEL { public partial class USR_MSTR { public string USR_USER { get; set; } public string USR_NAME { get; set; } public string USR_GROUP { get; set; } public string USR_DEPT { get; set; } public string USR_

web容器 - Jetty

详解web容器 - Jetty与Tomcat孰强孰弱 Jetty 基本架构 Jetty目前的是一个比较被看好的 Servlet 引擎,它的架构比较简单,也是一个可扩展性和非常灵活的应用服务器. 它有一个基本数据模型,这个数据模型就是 Handler(处理器),所有可以被扩展的组件都可以作为一个 Handler,添加到 Server 中,Jetty 就是帮你管理这些 Handler. 下图是 Jetty 的基本架构图,整个 Jetty 的核心组件由 Server 和 Connector 两个组件构

软件架构设计学习总结(22):软件架构——分层架构、事件驱动架构、微内核架构、微服务架构、基于空间的架构

分层架构 (Layered Architecture) 分层架构是最常见的架构,也被称为n层架构.多年以来,许多企业和公司都在他们的项目中使用这种架构,它已经几乎成为事实标准,因此被大多数架构师.开发者和软件设计者所熟知.比如MVC. 分层架构的一个特性就是 关注分离(separation of concerns) .在层中的组件只负责本层的逻辑.组件的划分很容易让它们实现自己的角色和职责,也比较容易地开发,测试管理和维护. 我们需要这样的冗余,即使业务层没有处理业务规则,也要通过业务层来调用数

基于.NET平台的分层架构实战(六)——依赖注入机制及IoC的设计与实现[转]

原文:http://www.cnblogs.com/leoo2sk/archive/2008/06/19/1225223.html 我们设计的分层架构,层与层之间应该是松散耦合的.因为是单向单一调用,所以,这里的“松散耦合”实际是指上层类不能具体依赖于下层类,而应该 依赖于下层提供的一个接口.这样,上层类不能直接实例化下层中的类,而只持有接口,至于接口所指变量最终究竟是哪一个类,则由依赖注入机制决定. 之所以这样做,是为了实现层与层之间的“可替换”式设计,例如,现在需要换一种方式实现数据访问层,