`
big_student
  • 浏览: 40291 次
  • 性别: Icon_minigender_1
  • 来自: 宝鸡
社区版块
存档分类
最新评论

伪造servlet容器会话机制

    博客分类:
  • J2EE
阅读更多

今天以前公司的项目问了一个关于会话的问题,觉得比较有意思,记录一下。

关于servlet的会话机制原理,这里就不啰嗦了,网络上一大把。主要说明下问的这个问题:

用浏览器访问servlet服务,servlet容器一般会返回一个标示当前会话的cookie,一般servlet容器默认的都是JSESSIONID,这样就会有个问题,每次我用一个浏览器登录后,我使用其他浏览器或者http访问工具如httpclient伪造一个刚浏览器登录的会话的cookie,那是不是就可以访问需要身份认证后的资源?

写个测试页面jsp:

 

<%
	Cookie [] cookies = request.getCookies();
	//cookie可能为null
	out.append("cookie is null :");
	out.append(cookies==null ? "true<br>" : "false<br>");
	if(cookies != null)
	for(int i=0; i<cookies.length; i++){
		out.append(cookies[i].getName()+":"+cookies[i].getValue());
		out.append("<br>");
	}
	out.print(request.getSession().getId());
%>

 使用浏览器访问这个jsp,查看JSESSIONID的cookie信息,然后用httpclient伪造一个cookie进行访问:

 

	HttpClient client = new HttpClient();
	HttpMethod get = new GetMethod("http://localhost:8080/test/test.jsp");
	Cookie cookie = new Cookie();
	cookie.setName("JSESSIONID");
	//设置域名
	cookie.setDomain("localhost");
	//设置path
	cookie.setPath("/test/");
	cookie.setValue("0000MDDSdWQ0_C2HDRFpurjIt91");
	HttpState state = client.getState();
	state.addCookie(cookie);
	client.setState(state);
	client.executeMethod(get);
	System.out.println(get.getResponseBodyAsString());
 

测试发现,浏览器访问返回的和httpclient返回的一样,说明cookie机制的会话是可以伪造的。

 

可见,伪造会话是可行的,如果默认使用容器的会话,可能会泄露安全数据,当然这是需要你的网络信息被侦听,获取到了你的会话cookie或者其他安全相关的cookie。使用高安全的https,或者做请求验证,在默认的会话机制上增加相关安全机制都可有安全保障

java程序依赖的lib放在附件了,要测试的话可以下载

2
1
分享到:
评论
8 楼 瓶鱼跃 2012-11-05  
big_student 写道
瓶鱼跃 写道
我下载了http client的jar包,为什么导入之后还是有很多错误呢??

httpclient依赖了apache的codec和logging2个包,我挂在附件了 版本可能都不是最新的

确实可以了,多谢楼主···
7 楼 big_student 2012-11-05  
瓶鱼跃 写道
我下载了http client的jar包,为什么导入之后还是有很多错误呢??

httpclient依赖了apache的codec和logging2个包,我挂在附件了 版本可能都不是最新的
6 楼 finallygo 2012-11-04  
瓶鱼跃 写道
我下载了http client的jar包,为什么导入之后还是有很多错误呢??

3和4的差别比较大...
5 楼 jayuton 2012-11-02  
对于安全要求比较高的页面,都会用令牌进行保护页面资源的
4 楼 瓶鱼跃 2012-11-02  
我下载了http client的jar包,为什么导入之后还是有很多错误呢??
3 楼 bewithme 2012-11-02  
你说的不错,的确可以伪造,所以会话周期不能太长,重人的应用应该用SSL进行保护。
2 楼 goodluck_wgw 2012-11-02  
瓶鱼跃 写道
楼主的HttpClient HttpMethod 这几个类是从哪个包来的???

apache HttpClient
1 楼 瓶鱼跃 2012-11-02  
楼主的HttpClient HttpMethod 这几个类是从哪个包来的???

相关推荐

    纯Servlet实现用户管理系统(入门实例,深刻认识Servlet)

    当服务器启动或第一次接收到Servlet请求时,Servlet容器(如Tomcat)会加载并初始化Servlet。初始化过程中,Servlet会执行`init()`方法,可以在此设置初始参数。服务阶段,Servlet通过`service()`或特定HTTP方法(如...

    深入java servlet 网络编程

    加载时,Servlet容器(如Tomcat)加载Servlet类并创建实例。初始化阶段,`init()`方法会被调用,一般用于配置和资源的初始化。服务阶段,`service()`方法处理请求。销毁阶段,`destroy()`方法被调用,用于释放占用的...

    j2ee servlet.zip

    3. **Servlet容器**:Tomcat、Jetty等是常见的Servlet容器,它们负责加载、管理Servlet,并处理来自客户端的请求。 4. **多线程模型**:Servlet默认是多线程的,因此开发者需要注意线程安全问题,避免在Servlet中...

    一个Servlet做的聊天程序,可实现多人对话,效果还不错!

    Java Servlet容器(如Tomcat、Jetty)负责加载、实例化和管理Servlet。 2. Servlet生命周期: Servlet的生命周期包括加载、初始化、服务、销毁四个阶段。当首次接收到对Servlet的请求时,容器会加载并初始化Servlet...

    Servlet实现登录验证

    每次有新的请求到达,Servlet容器会调用`service()`方法,根据请求类型(GET、POST等)选择合适的`doGet()`或`doPost()`方法来处理。当Servlet不再需要时,`destroy()`方法会被调用,用于清理资源。 在登录验证场景...

    servlet软件开发之四

    2. **Servlet容器**:如Tomcat、Jetty等,它们负责加载、管理Servlet并处理请求。了解如何配置和优化Servlet容器对于实际开发非常重要。 3. **Servlet配置**:在web.xml中配置Servlet,包括映射URL、设置初始化参数...

    servlet聊天室

    在Servlet容器(如Tomcat)中,每个Servlet实例可以服务于多个请求,这通常依赖于容器的线程池。聊天室项目中,为了保证消息的实时性,可能使用了线程来处理每个新到来的消息。 4. **会话管理**: 要实现用户之间...

    Servlet实现的购物车

    1. **Servlet生命周期**:Servlet在服务器启动时并不自动创建,而是当首次接收到请求时由Web容器(如Tomcat)加载并实例化。之后,Servlet会经历初始化、服务、销毁三个阶段。 2. **Servlet API**:Servlet的核心...

    基于Servlet的课程管理系统.zip

    5. 系统安全:如会话管理,防止跨站请求伪造(CSRF)和SQL注入等安全问题。Servlet需要正确处理请求,确保数据的安全性。 6. 错误处理:提供友好的错误页面,当出现异常或错误时,Servlet能够捕获并处理,返回适当...

    Java Servlet, JSP的安全性实现

    在实现Java Servlet和JSP的安全性时,开发者还需要考虑其他因素,如会话管理(Session Management)、错误处理、XSS(跨站脚本攻击)和CSRF(跨站请求伪造)防护、SQL注入防御以及定期更新和补丁应用。通过结合使用...

    java+servlet的企业网站源码

    3. 请求处理流程:当用户向服务器发送请求时,Servlet容器(如Tomcat、Jetty)会捕获请求,根据URL映射找到对应的Servlet实例。如果实例不存在,容器会创建一个新的Servlet实例。然后调用Servlet的`service()`方法,...

    基于Servlet的网上报名系统的设计与实现 - 副本(1).zip

    - 采用会话管理防止跨站请求伪造(CSRF)和会话劫持。 - 输入验证防止SQL注入攻击。 7. **部署与运行** - 将项目打包成WAR文件,部署到Servlet容器中。 - 配置Servlet容器的Context路径,以及数据库连接参数。 ...

    Elecve Web Application (Java servlet)

    9. **部署和测试**:了解如何将应用部署到Tomcat等Servlet容器,以及进行单元测试和集成测试。 以上就是Elecve Web Application所涉及的主要技术和知识点,这些内容对于理解和构建类似Web应用都是非常基础且重要的...

    servlet实现登录和注册

    Servlet是一个Java类,遵循Java Servlet API规范,用于动态处理Web请求。它由Web容器(如Tomcat)管理,接收HTTP请求,处理数据,并返回HTTP响应。Servlet生命周期包括加载、初始化、服务、销毁等阶段。 2. **HTTP...

    servlet-practices

    Servlet在Servlet容器(如Tomcat、Jetty)中运行,容器负责Servlet的加载、初始化、线程调度等。理解容器的工作原理有助于优化Servlet性能。 9. **异步Servlet** 自Java EE 7起,Servlet开始支持异步处理,允许...

    实现自动登陆.rar

    还可以使用CSRF(跨站请求伪造)防护机制,防止未经授权的登录操作。 5. **登录逻辑**:在用户访问需要登录的页面时,服务器检查Cookie中的Session ID,如果匹配则自动登录,否则引导用户进行登录。此外,还可以...

    javaweb.基础知识课件

    理解会话的工作原理以及如何避免会话劫持和跨站请求伪造(CSRF)攻击非常重要。 8. **部署描述符(Deployment Descriptor, web.xml)**: web.xml是JavaWeb应用的配置文件,用于配置Servlet、过滤器、监听器以及...

    Apache Tomcat 集群

    Apache Tomcat 是一款广泛应用的开源Java Servlet容器,它实现了Java EE Web应用程序的Servlet和JSP规范。Apache Tomcat 集群技术则是为了让多个Tomcat实例协同工作,以提高Web应用的可用性和可伸缩性。在高流量或...

Global site tag (gtag.js) - Google Analytics