我的系统在做AppScan安全扫描时,爆出一个高危漏洞:会话标识未更新。提供的解决办法是,在用户登录时始终使用新的会话。
我仔细查看了我的系统。原来在用户进入登录页面,但还未登录时,就已经产生了一个session,用户输入信息,登录以后,session的id不会改变,也就是说还是以前的那个session(事实上session也确实不会改变,因为没有建立新session,原来的session也没有被销毁)。
后来我做了如下改变。在我的登录servlet里面将用户刚进入登录页面的那个session用invalidate()销毁掉,在用户信息匹配成功后,再建立一个新session,将用户信息放到session中去。
本来以为这种做法应该可以解决问题了,但是再扫描发现问题还存在。再一查看,发现新建立的session与原来被销毁的session的id居然还是一样的。真是搞不懂了!
系统背景:j2ee,jboss
以下是我的登录servlet的代码:
···
HttpSession session = request.getSession(false);
System.out.println(session.getId());
if(session!=null){
session.invalidate();
}
/***接下来是对用户进行认证的代码***/
···
···
/***用户认证代码结束***/
HttpSession session1 = request.getSession(true);
System.out.println(session1.getId());
session1.setAttribute("",***);
后来我找了好久才发现,之所以将会话invalidate没有用,是因为invalidate方法不是真正的将session销毁,只是将session中的内容清空,所以当我invalidate以后再新建session,新建的session其实不是新的,是将之前的session重新启用了。于是session的id不变就不奇怪了。
要怎么才能真正的将session销毁掉呢?看看下面的办法:
在登录页面上加上一段代码:
request.getSession().invalidate();//清空session
Cookie cookie = request.getCookies()[0];//获取cookie
cookie.setMaxAge(0);//让cookie过期
然后用户再输入信息登录时,就会产生一个新的session了。
虽然我的系统里面没有使用cookie,但是只要是web系统就离不开cookie。系统里面没有使用cookie是我没有用cookie来保存数据、标示用户等等。但是服务器跟踪会话状态就是用的cookie。既然cookie是服务器用来跟踪会话状态的,那么如果cookie过期了,会怎么样?--不用解释了吧。回答了这个问题,怎么让会话真正被销毁也就不难回答了。
我在登陆页面上加的那段代码的作用就是,将用户进入登陆页面时所产生的会话也就是session清空,然后让跟踪这个会话的cookie过期,这样服务器就不再掌握有关这个会话的任何信息了。要想与服务器继续通信,就要产生一个新的会话才行。于是会话标示就更新了!
问题就是这么解决的。
总结起来,其实软件开发中的所有问题都不难,关键是找到问题的根源
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/yutan_313/archive/2011/03/19/6260573.aspx
分享到:
相关推荐
每个会话在服务器端都存在一个唯一的标示 SessionID,Session 对象发送到浏览器的唯一数据就是 SessionID,它一般存储在 Cookie 中。 6. public void setMaxInactiveInterval(int interval):设置会话的最大持续...
- **全局过程**:这些过程涉及到整个网络的协调,如负载标示、错误指示、X2接口配置、重置、eNB更新配置、资源状态上报等。 - **负载标示**:eNB通过X2AP通告其当前负载情况,帮助网络进行负载均衡决策。 - **错误...
- **exec webauth kickout**:将未通过Web认证的用户踢出。 - **exit**:退出当前模式或会话。 - **expire**:设置过期策略,如证书的有效期限。 - **export configuration**:导出当前配置文件,方便备份或迁移。 -...
用户应当安装并定期更新防病毒软件,同时在路由器上设置相应的安全策略以减少这类问题的发生。 综上所述,宽带路由器死机掉线问题的产生是多方面因素共同作用的结果。用户在选购和设置路由器时应该考虑到带机数量、...
- Broken过程用于更新一个已提交的工作的状态,可以将一个标记为broken的工作重新标记为未broken,并可指定下次运行时间。 - Change过程可以修改已提交的Job的属性。 - Interval过程用于设置或修改Job下次执行的间隔...
在商标方面,书籍中提到的公司产品标示通常作为商标提出,书内提及的所有品牌名、产品名或服务名都是相应所有者的商标、服务标记、商标或注册商标。 这本书的版权登记办公室位于英国,提供了出版社的全球编辑办公室...
在SIP事务处理中出现的 "4XXERR",可能表示SIP请求由于某种原因未成功。比如407 Proxy Authentication Required表示需要进行代理认证。 文档中还出现了IP地址和端口,如**.***.*.**和5060端口,分别对应于SIP信令和...
这时,可以使用 ipconfig /flushdns 和 ipconfig /registerdns 命令来解决此问题。 8. 查看本地端口 在 Lync Server 2010 部署中,查看本地端口可以帮助您了解 Lync Server 的网络拓扑结构。可以使用 netstat 命令...
这种功能在发送和接收加密信息时非常重要,确保数据在传输过程中不会因格式问题被破坏或截取。 ### 加密、解密功能 加密是将数据转换为不可读格式的过程,只有拥有正确密钥的用户才能将其解密。CryptoAPI提供了基于...
从给定的文件信息来看,这是一份由360安全卫士生成的系统诊断报告,其中包含了关于系统状态、运行中的进程以及潜在的安全问题等关键信息。下面将对这份报告进行详细的解析,以帮助理解其中所涉及的知识点。 ### 一...
3. MME发起创建会话请求(CreateSessionRequest)到S-GW(Serving Gateway,服务网关),包含承载的标示符(EBI),APN,移动IP地址,AMBR,以及可能的S-GW传输端点标识(TEID)等参数。S-GW响应创建会话请求...
- 防盗窃和破坏,设备应固定并标示,防止非法挪动。 - 防雷击需通过地线系统确保设备安全。 - 防火措施包括设置灭火设备。 - 防水防潮措施防止雨水渗入。 - 温湿度控制确保设备正常运行。 - 动力供应需配备...
* Session 域:就是一般的会话,如果客户端没有开启 Cookie,可以通过 URL 中的 UID 来标示 * Request 域:就是 GET 方式的 * Form 域:就是 POST 方式的 * Flash 域:与 Flash 通讯时候的变量 * Client 域:和...
描述部分未给出,但从标签“互联网 cs”可以推断这与互联网相关的计算机系统安全有关。 以下是从部分内容中提炼出的相关知识点: 1. **物理安全**: - 机房选址应考虑防震、防风、防雨,避免高层、地下室或邻近...
1. ASP.NET列表标记:在输出列表时,如果需要使用数字标示列表条目,应使用`<ol>`(ordered list)标签,而不是`<ul>`(unordered list),`<dl>`(definition list)或`<dd>`(definition term)。 2. SQL Server...
...本文将深入讲解PHP的基础知识,包括分界标示符、变量、数据类型...随着对PHP的理解加深,你可以进一步探索更复杂的主题,如错误处理、异常处理、数据库交互(如MySQLi或PDO)、文件操作、会话管理以及面向对象编程等。
- **防盗窃和防破坏**:设备固定并标示,通信线缆铺设安全。 - **防雷击**:设备需有效接地。 - **防火**:设有自动消防系统,采用耐火材料。 - **防水防潮**:防止水分渗透,采用防静电措施。 - **温湿度控制*...
尽管书中的内容可能已经被翻译成多种语言,且拥有各种格式(例如ISBN 978-1-4302-4623-7以及ISBN 978-1-4302-4624-4为电子书),但本书提到的商标名称、标志和图像,即便未明确标示为商标,也不能理解为对其是否有...
SIP是一种应用层协议,用于初始化、维护和终止多媒体会话。它是由Henning Schulzrinne教授在1998年初开始发起的,并于1999年3月由IETF的MMUSIC工作小组制定为正式标准RFC 2543。后来,IETF又成立了新的工作小组,...