今天以前公司的项目问了一个关于会话的问题,觉得比较有意思,记录一下。
关于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请求时,Servlet容器(如Tomcat)会加载并初始化Servlet。初始化过程中,Servlet会执行`init()`方法,可以在此设置初始参数。服务阶段,Servlet通过`service()`或特定HTTP方法(如...
加载时,Servlet容器(如Tomcat)加载Servlet类并创建实例。初始化阶段,`init()`方法会被调用,一般用于配置和资源的初始化。服务阶段,`service()`方法处理请求。销毁阶段,`destroy()`方法被调用,用于释放占用的...
3. **Servlet容器**:Tomcat、Jetty等是常见的Servlet容器,它们负责加载、管理Servlet,并处理来自客户端的请求。 4. **多线程模型**:Servlet默认是多线程的,因此开发者需要注意线程安全问题,避免在Servlet中...
Java Servlet容器(如Tomcat、Jetty)负责加载、实例化和管理Servlet。 2. Servlet生命周期: Servlet的生命周期包括加载、初始化、服务、销毁四个阶段。当首次接收到对Servlet的请求时,容器会加载并初始化Servlet...
每次有新的请求到达,Servlet容器会调用`service()`方法,根据请求类型(GET、POST等)选择合适的`doGet()`或`doPost()`方法来处理。当Servlet不再需要时,`destroy()`方法会被调用,用于清理资源。 在登录验证场景...
2. **Servlet容器**:如Tomcat、Jetty等,它们负责加载、管理Servlet并处理请求。了解如何配置和优化Servlet容器对于实际开发非常重要。 3. **Servlet配置**:在web.xml中配置Servlet,包括映射URL、设置初始化参数...
在Servlet容器(如Tomcat)中,每个Servlet实例可以服务于多个请求,这通常依赖于容器的线程池。聊天室项目中,为了保证消息的实时性,可能使用了线程来处理每个新到来的消息。 4. **会话管理**: 要实现用户之间...
1. **Servlet生命周期**:Servlet在服务器启动时并不自动创建,而是当首次接收到请求时由Web容器(如Tomcat)加载并实例化。之后,Servlet会经历初始化、服务、销毁三个阶段。 2. **Servlet API**:Servlet的核心...
5. 系统安全:如会话管理,防止跨站请求伪造(CSRF)和SQL注入等安全问题。Servlet需要正确处理请求,确保数据的安全性。 6. 错误处理:提供友好的错误页面,当出现异常或错误时,Servlet能够捕获并处理,返回适当...
在实现Java Servlet和JSP的安全性时,开发者还需要考虑其他因素,如会话管理(Session Management)、错误处理、XSS(跨站脚本攻击)和CSRF(跨站请求伪造)防护、SQL注入防御以及定期更新和补丁应用。通过结合使用...
3. 请求处理流程:当用户向服务器发送请求时,Servlet容器(如Tomcat、Jetty)会捕获请求,根据URL映射找到对应的Servlet实例。如果实例不存在,容器会创建一个新的Servlet实例。然后调用Servlet的`service()`方法,...
- 采用会话管理防止跨站请求伪造(CSRF)和会话劫持。 - 输入验证防止SQL注入攻击。 7. **部署与运行** - 将项目打包成WAR文件,部署到Servlet容器中。 - 配置Servlet容器的Context路径,以及数据库连接参数。 ...
9. **部署和测试**:了解如何将应用部署到Tomcat等Servlet容器,以及进行单元测试和集成测试。 以上就是Elecve Web Application所涉及的主要技术和知识点,这些内容对于理解和构建类似Web应用都是非常基础且重要的...
Servlet是一个Java类,遵循Java Servlet API规范,用于动态处理Web请求。它由Web容器(如Tomcat)管理,接收HTTP请求,处理数据,并返回HTTP响应。Servlet生命周期包括加载、初始化、服务、销毁等阶段。 2. **HTTP...
Servlet在Servlet容器(如Tomcat、Jetty)中运行,容器负责Servlet的加载、初始化、线程调度等。理解容器的工作原理有助于优化Servlet性能。 9. **异步Servlet** 自Java EE 7起,Servlet开始支持异步处理,允许...
还可以使用CSRF(跨站请求伪造)防护机制,防止未经授权的登录操作。 5. **登录逻辑**:在用户访问需要登录的页面时,服务器检查Cookie中的Session ID,如果匹配则自动登录,否则引导用户进行登录。此外,还可以...
理解会话的工作原理以及如何避免会话劫持和跨站请求伪造(CSRF)攻击非常重要。 8. **部署描述符(Deployment Descriptor, web.xml)**: web.xml是JavaWeb应用的配置文件,用于配置Servlet、过滤器、监听器以及...
Apache Tomcat 是一款广泛应用的开源Java Servlet容器,它实现了Java EE Web应用程序的Servlet和JSP规范。Apache Tomcat 集群技术则是为了让多个Tomcat实例协同工作,以提高Web应用的可用性和可伸缩性。在高流量或...