当前位置:首页 > 开发 > 互联网 > 正文

伪造servlet容器会话机制

发表于: 2012-11-01   作者:big_student   来源:转载   浏览次数:
摘要: 今天以前公司的项目问了一个关于会话的问题,觉得比较有意思,记录一下。 关于servlet的会话机制原理,这里就不啰嗦了,网络上一大把。主要说明下问的这个问题: 用浏览器访问servlet服务,servlet容器一般会返回一个标示当前会话的cookie,一般servlet容器默认的都是JSESSIONID,这样就会有个问题,每次我用一个浏览器登录后,我使用其他浏览器或者http访问工具如htt

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

关于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放在附件了,要测试的话可以下载

伪造servlet容器会话机制

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
1、servlet与servlet容器 Java Servlet(Java服务器小程序)是一个基于Java技术的Web组件,运行在服
原帖地址:http://book.51cto.com/art/200808/84876.htm 1.2 Servlet与Servlet容器 Java Servlet(J
在javax.servlet.servlet中的Servlet接口,声明有5个方法,签名如下: public void int(ServletConf
Spring的AbstractApplicationContext是ApplicationContext抽象实现类,该抽象类的refresh()方法定义
Spring的AbstractApplicationContext是ApplicationContext抽象实现类,该抽象类的refresh()方法定义
一.事件机制的概述 我们知道ApplicationContext和BeanFactory相比增加了容器的事件机制,关于事件机
Servlet容器处理Servlet请求的简单流程图如下图所示: UML类图如下图所示: HttpServletProcessor类
出于工作&兴趣,最近在学习研究jsp/servlet ,结合理论再编程实践,感觉学到的东西多而杂,需要好
怎样配制集群/Session复制 print-friendly version 快速入门 要在Tomcat 5.5容器里进行session复制
怎样配制集群/Session复制 print-friendly version 快速入门 要在Tomcat 5.5容器里进行session复制
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号