上一篇说到《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的问题可以看这个和这个帖子。

Tomcat的SessionID引起的Session Fixation和Session Hijacking问题相关推荐

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

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

  2. 王高利:Apache Httpd负载均衡Tomcat并实现Session Sticky和Session Cluster

    Apache Httpd负载均衡Tomcat并实现Session Sticky和Session Cluster http://anyisalin.blog.51cto.com/10917514/176 ...

  3. Demo_mmall v2.0 (四) Tomcat集群演进及使用Redis进行session重构实现单点登录

    小谈mmall架构演进 上回书和上上回书说到redis的用法还有在代码里怎么操作Redis数据库,学完了得用啊.怎么用啊?这得从项目架构说起了. mmall是一个简单的用SSM搭建起来的基本只能本地玩 ...

  4. Spring Session - Cookie VS Session VS Token 以及 Session不一致问题的N种解决方案

    文章目录 Cookie VS Session VS Token History Cookie Session Token Session不一致问题 Session不一致解决方案 nginx sessi ...

  5. 服务器端Session和客户端Session

    客户端Session和服务器端Session 当用户首次与web服务器建立连接的时候,服务器会给用户分发一个SessionID作为标识.SessionID是一个由24个字符组成的随机字符串.用户每次提 ...

  6. 服务器端Session和客户端Session, 以及cookie的区别

    Session其实分为客户端Session和服务器端Session. 当用户首次与Web服务器建立连接的时候,服务器会给用户分发一个 SessionID作为标识.SessionID是一个由24个字符组 ...

  7. 服务器端Session、客户端Session和Cookie的区别

    1.Session其实分为客户端Session和服务器端Session. 当用户首次与Web服务器建立连接的时候,服务器会给用户分发一个 SessionID作为标识.SessionID是一个由24个字 ...

  8. session.invalidate()和session.removeAttribute()的区别

    1.理清概念 要明白这两个方法的区别,首先需要弄清楚这两个对象的概念. 1.1.关于session session是一种保存在服务端的,用于记录用户状态的对象. 用户状态可能有很多种,如登录用户名,登 ...

  9. session传递参数_分布式 Session 之 Spring Session 架构与设计

    作者 | 李增光 杏仁后端工程师.「只有变秃,才能变强!」 ​前言 开始进行 Web 开发时,我们可能会遇到这样的情况,当服务器重启之后,之前的登录状态会失效需要重新登录.又或者你的应用程序部署了不止 ...

最新文章

  1. 斯坦福全球AI报告:清华AI课程人数增16倍,人才需求暴增 35 倍
  2. Python 基础篇-正斜杠(/)和反斜杠(\)的用法
  3. [转] 关于 WCF 中数据压缩的几篇文章
  4. rpc协议微服务器,RPC协议及实现方式(分布式微服务治理的核心)
  5. dataframe 一列的不同值_python数据分析包|Pandas-02之缺失值(NA)处理
  6. 算法学习笔记:对指定金额计算最少钞票数
  7. 解决SQL SERVER 2000挂起的问题
  8. dfs-Bit Compression
  9. 二层交换:网桥(交换机)
  10. 在线商城之购物车实现——(附完整代码)
  11. 以太网口差分电平_以太网差分信号线在两层PCB板上的布线方法
  12. 一篇文章看明白 Android 从点击应用图标到界面显示的过程
  13. 3.11 污点和容忍度
  14. 论文框架和目录一样吗_毕业论文提纲怎么写?过来人:手把手帮你打造完美论文写作模板...
  15. Lexar雷克沙 nCARD存储卡全网发布,可用于华为手机内存扩容
  16. plotjuggler⬅ROS1/ROS2画轨迹神器➡rqt_plot+rqt_multiplot之超级加强版
  17. NMOS管和PMOS管做开关控制电路
  18. 怎么为图片、视频设置打开方式
  19. 库卡机器人bco运动_库卡机器人四种启动方式说明——库卡机器人
  20. 好听的计算机软件名称,好听的组合名字大全

热门文章

  1. java线程组 线程池_JAVA多线程(三)-----线程组、线程池和线程相关类
  2. python argv,Python argv函数简介
  3. qt 中转化图片格式与大小的方法
  4. 很多人都不知道的小秘密,c++中拷贝分为两种
  5. Akka的Hello World(一)Akka的Actor架构
  6. (8)操作系统安全机制之二
  7. 信息系统项目管理师:第9章:项目人力资源管理-章节重点
  8. linux idea 启动报错StartupAbortedException: Fatal error initializing plugin idea.plugin.protoeditor
  9. Winform中设置ZedGraph鼠标悬浮显示距离最近曲线上的点的坐标值和X轴与Y轴的标题
  10. Atom 编辑器实时预览 HTML 页面