session fixation攻击

什么是 session fixation 攻击
Session fixation有人翻译成“ Session完成攻击”,实际上 fixation是确知和确定的意思,在此是指Web服务的会话ID是确知不变的,攻击者为受害着确定一个会话ID从而达到攻击的目的。在维基百科中专门有个词条 http://en.wikipedia.org/wiki/Session_fixation,在此引述其攻击情景,防范策略参考原文。

攻击情景
原文中Alice是受害者,她使用的一个银行网站http://unsafe/存在 session fixation漏洞,Mallory是攻击者,他想盗 窃Alice的银行中的存款,而Alice会点击Mallory发给她的网页连接(原因可能是Alice认识Mallory,或者她自己的安全意识不强)。

攻击情景1:最简单:服务器接收任何会话ID
过程如下:
1.Mallory发现http://unsafe/接收任何会话ID,而且会话ID通过URL地址的查询参数携带到服务器,服务器不做检查
2.Mallory给Alice发送一个电子邮件,他可能假装是银行在宣传自己的新业务,例如,“我行推出了一项新服务,率先体验请点击:http://unsafe/?SID= I_WILL_KNOW_THE_SID, I_WILL_KNOW_THE_SID是Mallory选定的一个会话ID。
3.Alice被吸引了,点击了 http://unsafe/?SID= I_WILL_KNOW_THE_SID,像往常一样,输入了自己的帐号和口令从而登录到银行网站。
4.因为服务器的会话ID不改变,现在Mallory点击 http://unsafe/?SID= I_WILL_KNOW_THE_SID后,他就拥有了Alice的身份。可以为所欲为了。

攻击情景2:服务器产生的会话ID不变
过程如下:
1.Mallory访问 http://unsafe/ 并获得了一个会话ID(SID),例如服务器返回的形式是:Set-Cookie: SID=0D6441FEA4496C2
2.Mallory给Alice发了一个邮件:”我行推出了一项新服务,率先体验请点击:http://unsafe/?SID=0D6441FEA4496C2
3.Alice点击并登录了,后面发生的事与情景1相同

攻击情景3:跨站cookie(cross-site cooking)
利用浏览器的漏洞,即使 http://good 很安全,但是,由于浏览器管理cookie的漏洞,使恶意网站 http://evil/ 能够向浏览器发送 http://good 的cookie。过程如下:
1.Mallory给Alice发送一个邮件“有个有趣的网站:http://evil 很好玩,不妨试试”
2.Alice访问了这个链接,这个网站将一个会话ID取值为I_WILL_KNOW_THE_SID 的 http://good/ 域的cookie设置到浏览器中。
3.Mallory又给Alice发了个邮件:“我行推出了一项新服务,率先体验请点击:http://good/”
4.如果Alice登录了,Mallory就可以利用这个ID了

在javaEE中, 情景1应该是不可能的吧, 因为 session的ID都是由服务器产生的
对于现在的浏览器,情景3估计也是不可能的吧.
只有情景2最靠谱, 先自己访问下某网站,获取自己的 session ID,然后把这个sessionID拼接在网址后面发给别人访问,只要那个人一登录, 我们也就相当于登录了

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 来实现这一点。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值