上一篇说到《Spring MVC防御CSRF、XSS和SQL注入攻击》,今天说说SessionID带来的漏洞攻击问题。首先,什么是Session Fixation攻击和Session Hijacking攻击问题? 说来话长,非常具体的解释查看我这个pdf文件:《Session Fixation Vulnerability in Web-based Applications》。为什么会注意到这个问题?其实原来也知道session劫持的问题,但没有注意,这几天用IBM Ration AppScan扫描了web漏洞,发现一个严重的Session Fixation漏洞:"会话标识未更新。针对这个问题的解决方案: 始终生成新的会话,供用户成功认证时登录。防止用户操纵会话标识。issue a new JSESSIONID cookie after login。请勿接受用户浏览器登录时所提供的会话标识。" 原来,用户访问我们的登录页面,Tomcat就会生成一个SessionID,加密后放到用户浏览器Cookie中。当用户登录后,这个SessionID并没有改变。更加糟糕的是,每次在同一台机器上,都使用同一个SessionID。这就造成了严重的Session Fixation和Session Hijacking漏洞。其实,如果Tomcat启用了SSL,Tomcat的默认行为是:当用户通过登录后,生成一个新的SessionID。如果没有配置SSL,手动让Tomcat生成新的SessionID的方法是:


/*
 * Authenticate, first invalidate the previous Tomcat sessionID immediately
 * This step is only required when NO SSL of Tomcat is applied!
 */
if (session!=null && !session.isNew()) {
    session.invalidate();
}
/*
 * Create the sessionID 
 * Actually if deploy this web site in Tomcat by SSL, by default a new SessionID will be generated 
 * 
 * */ 
HttpSession session = getRequest().getSession(true);

在后台登陆逻辑中,登陆前生成新的SessionID。

另外可以采用下面的CheckList:

  • 查看sessionID生成策略,确保不可被猜测(Tomcat没问题)
  • 查看sessionID保存策略,确保不通过URL进行传递(通过URL传递的SessionID禁不起安全测试)
  • 每次登录更换sessionID(已解决,事实上Tomcat在SSL下默认也是这样)
  • Session Cookie 设置HttpOnly(Tomcat没问题)
  • Session Cookie 设置,特别是用户IP, UserAgent...等更改强制session过期需要重新登录(备用,防止Session保持攻击)

Session Fixation攻击

举一个形象的例子,假设A有一辆汽车,A把汽车卖给了B,但是A没有把钥匙都交给B,自己还留了一把。这时候如果B没有换锁的话,A还是可以打开B的车的。在网站上,具体的攻击过程是:攻击者X首先获取一个未经认证的SessionID,然后把这个SessionID交给用户Y去认证,Y完成认证后,服务器并未更新此SessionID的值(注意是未改变SessionID,而不是Session),所以X可以直接凭借此SessionID登录进Y的账户。X怎么拿到SessionID的?常用的方法有Xss攻击(如果设置HttpOnly此方法无效)、网络Sniff、本地木马窃取、网络嗅探等。解决Session Fixation攻击的办法就是在登录完成后,重新生成不可以猜测的SessionID。

ASP.NET的解决Session Fixation和Session Hijacking的问题

ASP.NET的解决Session Fixation和Session Hijacking的问题可以看这个这个帖子。

http://www.cnblogs.com/Mainz/archive/2012/11/09/2762456.html

Tomcat的SessionID引起的Session Fixation和Session Hijacking问题的更多相关文章

  1. session fixation

    转自:session fixation攻击 什么是session fixation攻击 Session fixation有人翻译成"Session完成攻击",实际上fixation ...

  2. Nginx+Tomcat搭建集群,Spring Session+Redis实现Session共享

    小伙伴们好久不见!最近略忙,博客写的有点少,嗯,要加把劲.OK,今天给大家带来一个JavaWeb中常用的架构搭建,即Nginx+Tomcat搭建服务集群,然后通过Spring Session+Redi ...

  3. 【tomcat】sessionId学习(未完待续)

    这里主要研究tomcat中session的管理方式以及sessionId的原理,下文将研究sessionid存到redis中以及基于redis实现session共享. 平时也就是了解session是基 ...

  4. nginx+keepalived+tomcat+memcache实现双VIP高可用及Session会话保持

    Nginx+Keepalived+Tomcat+Memcached 实现双VIP负载均衡及Session会话保持 IP 信息列表: 名称         IP                      ...

  5. 漏洞:会话固定攻击(session fixation attack)

    什么是会话固定攻击? 会话固定攻击(session fixation attack)是利用应用系统在服务器的会话ID固定不变机制,借助他人用相同的会话ID获取认证和授权,然后利用该会话ID劫持他人的会 ...

  6. Tomcat使用Memcached Session Manager管理Session

    Tomcat使用Memcached Session Manager管理Session 废话不多说,直接进入主题.项目使用阿里云负载均衡+ECS服务器集群进行部署,Tomcat使用8.5版本.阿里云负载 ...

  7. tomcat启动报错 ERROR o.a.catalina.session.StandardManager 182 - Exception loading sessions from persiste

    系统:centos6.5 x86_64 jdk: 1.8.0_102 tomcat:8.0.37 tomcat 启动报错: ERROR o.a.catalina.session.StandardMan ...

  8. ASP.NET Session and Forms Authentication and Session Fixation

    https://peterwong.net/blog/asp-net-session-and-forms-authentication/ The title can be misleading, be ...

  9. 使用Memcached Session Manager扩展Session管理

    >>Tomcat的session管理 在请求过程中首先要解析请求中的sessionId信息,然后将sessionId存储到request的参数列表中. 然后再从request获取sessi ...

随机推荐

  1. WPF 系统托盘 图标闪烁

    WPF消息通知 系统托盘,图标闪烁 using System.Windows.Forms; using System.Windows.Threading; public partial class W ...

  2. MySQL在ROW模式下通过binlog提取SQL语句

    Linux基于row模式的binlog,生成DML(insert/update/delete)的rollback语句通过mysqlbinlog -v 解析binlog生成可读的sql文件提取需要处理的 ...

  3. CPU原理

    cpu map 1.CPU的整体架构: 2.从CPU向内存 3.CPU和内存的关系图 4.CPU指令集 5.A+B 6.结果输入寄存器 7.寄存器中的临时存储,用来暂存B 8.将B传入寄存器 9.A会 ...

  4. Linux磁盘与文件系统管理

    df df(disk free) 功能说明:显示磁盘的相关信息.语 法:df [-ahHiklmPT][--block-size=<区块大小>][-t <文件系统类型>][-x ...

  5. 如何在LINUX VPS上安装VPN详细步骤

    在vps上安装vpn是个难点,很多朋友都不会,这儿结合一位朋友的安装经验做下介绍.注意你的vps要安装做vpn使用,一定要注意你的流量限制,使用Vpn上游戏上youtube看视频等都比较耗费资源,否则 ...

  6. UML 小结(1)- 整体阐述

    前言:              UML( Unified Modeling Language) 又称统一建模语言或标准建模语言,是始于1997年一个OMG标准,它是一个支持模型化和软件系统开发的图形 ...

  7. win7 telnet命令无法使用

    很多做网络测试的同学发现安装win7后,无法使用telnet命令了,提示“telnet不是内部或外部命令,也不是可运行的程序”,但是很需要在win7中使用telnet工具,怎么办? 首先你要要确认你的 ...

  8. html5游戏引擎-Pharse.js学习笔记(一)

    1.前言 前几天随着flappy bird这样的小游戏的火爆,使我这种也曾了解过html5技术的js业余爱好者也开始关注游戏开发.研究过两个个比较成熟的html5游戏引擎,感觉用引擎还是要方便一些.所 ...

  9. How to avoid C# console applications from closing automatically.

    One way is to interop it with msvcrt.dll You can pinvoke this C function into your C# application. T ...

  10. Codeforces Gym 100342J Problem J. Triatrip 三元环

    题目链接: http://codeforces.com/gym/100342 题意: 求三元环的个数 题解: 用bitset分别统计每个点的出度的边和入度的边. 枚举每一条边(a,b),计算以b为出度 ...