`

Tomcat 7 released

阅读更多

Change Log见此: http://tomcat.apache.org/tomcat-7.0-doc/changelog.html

看看都有什么新Feature(最显著的三个特征是Servlet 3.0,内存检测泄露和增强的安全特性):
1. 使用随机数去防止跨站脚本攻击;
2. 改变了安全认证中的jessionid的机制,防止session攻击;
3. 内存泄露的侦测和防止;
4. 在war文件外使用别名去存储静态内容;
5. 对Servlet 3.0,JSP 2.2和JSP-EL 2。2的支持;
6. 更容易将Tomcat内嵌到应用去中去,比如JBoss;
7. 异步日志记录。

详细分解:


1. 使用随机数去防止跨站脚本攻击:

Wikipedia将跨站请求伪造攻击(Cross Site Request forgery,CSRF)定义为:“一种影响Web应用的恶意攻击。CSRF让用户当进入一个可信任的网页时,被强行执行恶意代码。

Tomcat 7中有一个servlet过滤器,用于将随机数存储在用户每次请求处理后的seesion会话中。这个随机数,必须作为每次请求中的一个参数。 Servlet过滤器然后检查在请求中的这个随机数是否与存储在用户session中的随机数是一样的。如果它们是相同的,该请求是判断来自指定的网站。如果它们是不同的,该请求被认为是从其他网站发出并且会被拒绝。

String previousNonce = req.getParameter(Constants.CSRF_NONCE_REQUEST_PARAM); 
String expectedNonce = (String) req.getSession(true).getAttribute(Constants.CSRF_NONCE_SESSION_ATTR_NAME); 

 

< c:url var="url" value="/show" > 
< c:param name="id" value="0" / > 
< c:param name="org.apache.catalina.filters.CSRF_NONCE" value="${session.org.apache.catalina.filters.CSRF_NONCE}" / > 
< /c:url > 

 
2. 改变了安全认证中的jessionid的机制,防止session攻击:

原来的问题就是Cookie的JSESSIONID参数被其他主机劫持,问题很简单,看看是怎么解决的:

Tomcat 7对此的解决方案是一个补丁,它在验证后改变了jsessionid。也就是说,如果原jsessionid的用户并不在线,那么上线创建会话时验证用户,如果发现他是一个合法者,除了允许访问外,原有jsessionid废除,使用新值。由此可见,倘若该用户会话属于存活状态,如果第三方主机会话劫持并以该用户访问Tomcat,其安全机制并无法起到作用。


3. 内存泄露的侦测和防止:

只有有限的能力,包括部分如下情形:

• JDBC驱动的注册

• 一些日志框架

• 在ThreadLocals中保存了对象但没有删除它们

• 启动了线程但没停止

以及部分 Java API 存在内存泄漏的场景:

使用 javax.imageio API ( Google Web Toolkit会用到)

使用 java.beans.Introspector.flushCaches()

使用 XML 解析器

使用 RMI 远程方法调用

从 Jar 文件中读取资源


4. 在war文件外使用别名去存储静态内容:

Web应用程序需要静态资源文件,比如象CSS,Javascript和视频文件、图片文件等。通常都把它们打包放在war文件中,这将增加了WAR文件的大小并且导致很多重复的加载静态资源。一个比较好的解决方法是使用Apache HTTP服务器去管理这些静态文件资源。也有一种做法是使用Linux上面的mount功能,配置share目录来实现,当然静态资源还是用Apache服务器更有效率。

Tomcat允许使用新的aliases属性,指出静态文件资源的位置,可以通过使用Classloader.getResourceAsStream('/static/...')或者在链接中嵌入的方法让Tomcat去解析绝对路径,下面是一个在context.xml中配置的例子:

< ?xml version="1.0" encoding="UTF-8"? > 
< Context path="/Tomcat7demo" aliases="/static=/home/avneet/temp/static" > 
< /Context >

 

假设/home/avneet/temp/static这个文件夹存放有一张图片bg.png,如果war文件以Tomcat7demo的名字部署,那么可以通过以下三个方式去访问这张图片:

1.直接访问 http://localhost:8080/Tomcat7demo/static/bg.png
2.在HTML链接中访问:< img src="/Tomcat7demo/static/bg.png" / >
3.通过JAVA代码访问: ByteArrayInputStream bais = (ByteArrayInputStream)getServletContext().getResourceAsStream("/static/bg.png");


5. 对Servlet 3.0,JSP 2.2和JSP-EL 2.2的支持:Servlet 3的增强特性有:

• 可以在POJO或者过滤器filters中使用annotations注释(在web.xml中不再需要再进行设置了)
• 可以将web.xml分块进行管理了。也就是说,用户可以编写多个xml文件,而最终在web.xml中组装它们,这将大大降低web.xml的复杂性增强可读性。

• 异步处理web的请求,能让使用异步I/O的web应用程序可以移植到不同的web容器中。
异步处理使用非阻塞I/O,每次的HTTP连接都不需要对应一个线程。更少的线程可以为更多的连接提供服务。(这个应该是未来WEB容器的发展必备能力吧)

这对于需要长时间计算处理才能返回结果的情景来说是很有用的,比如产生报表,Web Servce调用等。
• 安全的增强---Servlet 3.0现在使用SSL去加强了会话session的跟踪,代替了原来的cookie和URL重写。(使用SSL对用户体验有什么影响么?比如要求HTTPS?)


6 更容易将Tomcat内嵌到应用去中去,比如JBoss:

象在CATALINA_HOME/conf/server.xml中的很多配置,现在都可以用程序动态去设置了。

下面是CATALINA_HOME/conf/server.xml中的一些相关属性和配置:

< Server > 
< Service > 
< Connector port="8080 > 
< Engine > 
< Host appBase="/home/avneet/work/Tomcat7demo/dist" / > 
< /Engine > 
< /Connector > 
< /Service > 
< /Server > 

 

我们可以通过程序去进行动态设置了:

final String CATALINA_HOME = "/home/avneet/work/temp/Tomcat7demo/"; 
Tomcat Tomcat = new Tomcat(); 
Tomcat.setBaseDir( CATALINA_HOME ); 
Tomcat.setPort( 8080 ); 
Tomcat.addWebapp("/Tomcat7demo", CATALINA_HOME + "/webapps/Tomcat7demo.war"); 
Tomcat.start(); 
System.out.println("Started Tomcat"); 
Tomcat.getServer().await(); //Keeps Tomcat running until it is shut down 
//Webapp Tomcat7demo accessible at http://localhost:8080/Tomcat7demo/ 

 
7 异步日志记录:

包括了一个异步日志记录器(AsyncFileHandler)。使用AsyncFileHandler,时,只需要在CATALINA_HOME/conf/logging.properties中把FileHandler全部替换为AsyncFileHandler就可以了。当有日志发向AsyncFileHandler时,日志被加入到队列中(java.util.concurrent.LinkedBlockingDeque)并且方法调用的信息会马上返回不需要等待I/O写到磁盘中。当类加载器加载AsyncFileHandler时,会有一个单独的线程启动,这个线程会从队列中读取日志信息并且写到磁盘中去。

Tomcat 7的自带程序例子有两个servlets,一个是演示了如何采用随机数的办法防止CSRF攻击,另外一个是描述了使用aliases。更新一下web/META-INF/context.xml,指出图片的绝对路径即可顺利运行。

通过ant运行build.xml去将它们部署到Tomcat 7中,使用如下两个地址访问:

http://localhost:8080/Tomcat7demo/csrf/

http://localhost:8080/Tomcat7demo/alias/


译文链接:http://jackyrong.javaeye.com/blog/774685 根据译文有修改。

 

分享到:
评论

相关推荐

    apache-tomcat-6.0.33

    Apache Tomcat is developed in an open and participatory environment and released under the Apache License version 2. Apache Tomcat is intended to be a collaboration of the best-of-breed developers ...

    Tomcat8.0.28 服务器

    The Apache Tomcat software is developed in an open and participatory environment and released under the Apache License version 2. The Apache Tomcat project is intended to be a collaboration of the ...

    apache tomcat 9.0.6

    The Apache Tomcat software is developed in an open and participatory environment and released under the Apache License version 2. The Apache Tomcat project is intended to be a collaboration of the ...

    apache-tomcat-6.0.18.zip

    Apache Tomcat is developed in an open and participatory environment and released under the Apache License version 2. Apache Tomcat is intended to be a collaboration of the best-of-breed developers ...

    apache-tomcat-8.0.33

    The Apache Tomcat software is developed in an open and participatory environment and released under the Apache License version 2. The Apache Tomcat project is intended to be a collaboration of the ...

    apache-tomcat-10.0.20

    Eclipse中tomcat的配置 Welcome to Apache Tomcat!...The Apache Tomcat software is developed in an open and participatory environment and released under the Apache License version 2 . The A

    Apache及Tomcat搭建集群环境过程解析

    Apache下载地址:http://httpd.apache.org/ 我下载的是Apache httpd 2.2.27 Released Tomcat 下载地址:http://tomcat.apache.org/download-60.cgi 我下载的是6.0.39的解压版 首先是配置Tomat,因为Tomcat就是集群...

    [论坛社区]Project Babel v0.5 Monster Inc Released!

    资源内容:项目全套源码+完整文档 源码说明: 全部项目源码都是经过测试校正后百分百成功运行。 SpringBoot 毕业设计,SpringBoot 课程...部署环境:Tomcat(建议用 7.x 或者 8.x b版本),maven Spring root vue.js

    使用Maven创建Web应用程序项目

    如何使用 Maven 创建一个 Java Web 项目(Spring MVC)。 用到的技术/工具: Maven 3.3.3 Eclipse 4.3 JDK 8 Spring 4.1.1.RELEASED Tomcat 7 Logback 1.0.13

    openoffice jodconverter(2.2.2).zip

    This is JODConverter version 2.2.2, released on 2009-04-11. JODConverter is a Java library for converting office documents into different formats, using OpenOffice.org 2.x or 3.x. See ...

    基于JSP的博客系统论文+源码+数据库

    Blog is simple to network as the carrier, rapid conveniently released their experiences, instant effectively communicate easily with others, then set colorful personalized display in an integrated ...

    《Java Servlet编程(第二版)》英文版 chm (含源码)

    Amazingly, the official javax.servlet and javax.servlet.http packages have been the first Java classes to be officially released as open source. They were transferred to the Apache Software Foundation...

Global site tag (gtag.js) - Google Analytics