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

什么是会话固定攻击?

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

整个攻击流程是:

1、攻击者Attacker能正常访问该应用网站;

2、应用网站服务器返回一个会话ID给他;

3、攻击者Attacker用该会话ID构造一个该网站链接发给受害者Victim;

4-5、受害者Victim点击该链接,携带攻击者的会话ID和用户名密码正常登录了该网站,会话成功建立;

6、攻击者Attacker用该会话ID成功冒充并劫持了受害者Victim的会话。

更多攻击例子参考:https://www.owasp.org/index.php/Session_fixation

攻击分析

攻击的整个过程,会话ID是没变过的,所以导致此漏洞。

攻击修复

1、登录重建会话

每次登录后都重置会话ID,并生成一个新的会话ID,这样攻击者就无法用自己的会话ID来劫持会话,核心代码如下。

// 会话失效
session.invalidate();

// 会话重建
session=request.getSession(true);

2、禁用客户端访问Cookie

此方法也避免了配合XSS攻击来获取Cookie中的会话信息以达成会话固定攻击。在Http响应头中启用HttpOnly属性,或者在tomcat容器中配置。关于HttpOnly更多详细说明大家可以自行百度。

道高一尺,魔高一丈。目前我们已经对全线系统及时填补了该漏洞,以免给攻击者留下突破口。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Session 是一种在 Web 应用程序中跟踪用户状态的机制。在用户登录时,可以创建一个 session,将用户的身份验证信息存储在 session 中,并将 session ID 存储在 cookie 中发送给客户端,以便于后续的访问。 以下是一个简单的实现方法: 1. 在用户登录成功时,创建一个 session,并将用户信息存储在其中。例如: ``` session_start(); $_SESSION['user_id'] = $user_id; ``` 2. 将 session ID 存储在 cookie 中发送给客户端。例如: ``` setcookie('session_id', session_id(), time() + 3600, '/'); ``` 其中,第一个参数为 cookie 的名称,第二个参数为 session ID,第三个参数为过期时间(这里设置为一个小时),第四个参数为 cookie 的路径。 3. 在后续的请求中,通过检查 cookie 中的 session ID 来验证用户的身份。例如: ``` session_start(); if (!isset($_SESSION['user_id']) || empty($_COOKIE['session_id']) || $_COOKIE['session_id'] != session_id()) { header('Location: login.php'); exit; } ``` 其中,第一行代码开始或恢复一个 session,第二行代码检查 session 中是否保存了用户信息,第三行代码检查 cookie 中是否包含 session ID,第四行代码检查 cookie 中的 session ID 是否与当前 session ID 相同。如果任何一个条件不满足,则重定向到登录页面。 注意:为了保护 session 的安全性,需要在服务器端禁用 session ID 的传递,以避免 session fixation 攻击。可以通过设置 session.use_only_cookies 为 true 来实现这一点。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值