[Web]Session定置攻击的过程和预防
08/30/2013
问题
确保用户的session标识符不会由第三方提供,例如挟持了用户的session的攻击者
方案
只要用户的授权范围改变,如成功登陆后,就通过session_regenerate_id()来重新生成session标识符
<?php session_regenerate_id(); $_SESSION [ 'logged_in' ] = true;
?> |
如上图,用户本次登陆时传递给服务器的cookies中的session id是 4tj1583c1nplkkf80oa2ikqf22。当验证成功后,利用session_regenerate_id()函数重新分配一个 session id 9kehkhf5m900tqefbee97ho5n4,存在cookies中传递给客户端。
在默认情况下,PHP可以接受来自cookies或URL中的session标识符。而攻击者可能会欺骗受害人点击一个包含session标识符并指向到你的应用的链接:
<a href="http://example.org/login.php?PHPSESSID=1234">点击</a> |
点击了该链接的用户,其session标识符会被重置为1234。因此,攻击者在知道了这个用户的session标识符后,就可以通过使用相通的session标识符来尝试劫持用户的会话。
例子
- 首先,攻击者在这种情况下也是一个合法用户,登录到服务器
- 服务器向攻击者发送一个发送一个Session ID 1234
- 攻击者向用户发送超链接http://online.worldbank.dom/login.jsp?sessionid=1234,并企图诱惑他去点击
- 服务器收到login.jsp?sessionid=1234的请求,因为web服务器已经创建了基于Session ID 1234的会话,所以不会重新创建Session ID
- 用户提供了他的账号密码,服务器授予他访问他的银行帐户的权限
- 因为知道Session ID,攻击者同样可以通过account.jsp?sessionid=1234访问并操作用户信息
攻击过程
一般来说,会话固定攻击是一个三个步骤,如下图所示
- 会话建立:首先,攻击者在目标服务器上设置一个所谓的Session陷阱,获得Session ID,或者选择一个通常任意Session ID用于攻击。在某些情况下,建立了陷阱会话需要维护(存活),通过重复发送请求引用来避免空闲会话超时。
- 会话定置:接下来,攻击者需要介绍他的SessionID给用户的浏览器,从而恢复他的会话。
- 进入会话:最后,攻击者必须等待,直到用户登录到目标服务器使用前面固定Session ID,然后进入用户的会话。
通过确保只要改变用户的授权范围就重新生成session标识符,可以有效地消除session定置攻击。如图一所示,PHP会自动更新存储的session数据并传送新的session标识符。——这算是比较简单有效的防止攻击的方法了
相关推荐
php session处理函数文件,大家可以仔细看下
这个项目是一个基于SpringBoot的WebSocket定制starter,主要用于WebSocket session的状态管理,具备单机和集群能力。用户可以定制自己的ServerEndPoint和WebSocketManager,使用时面向接口WebSocket。
NULL 博文链接:https://yuhuiblog695685688425687986842568269.iteye.com/blog/2327111
Shelloid-Sessionstore 是 Sessionstore Node.js 模块的定制克隆,用于将会话存储功能与 Shelloid 应用程序服务器集成。 通常,您不需要直接使用此模块 - 它由 Shelloid 在内部使用。 如果您正在为 Node.js 项目...
openwrt上面的frpc界面,虽然没包含frpc主程序,但是挺好用。 后面会有语言包和定制工具。
定制化的php验证码类 创建验证码图像: 建立画布(__construct函数) ...设置画布背景($this->set_bgcolor();... 表单页面检测验证码的方法,对比 $_SESSION[an] 是否等于 $_POST[验证码文本框ID]
你可在分析打印后大致推测出那两个文件夹可能相同,这里推荐你使用 Beyond Compare 比对两个庞大的文件夹是否相同,记得取消对勾 Session => Session Settings => Comparison => Compare timestamps 用于不比对...
瑞吉外卖是一个为餐饮企业(餐厅、饭店等)定制的软件产品,包括系统管理后台和移动端应用两部分。 其中,系统管理后台主要供餐饮企业内部员工使用,可以对餐厅的菜品、套餐、订单等进行管理维护。移动端应用则主要...
在ASP.NET里,你可以为你的每个请求定制Session状态存储。本文将探讨存储Session变量可伸缩性和可靠性都很好的方式之一的SQL Server 。 在传统的ASP里 ,默认的Session状态保存在服务器的内存中。 但是,这种做法...
ESP32_Mega_Session 第一天(2021年2月24日): 我们的电子俱乐部定制ESP32开发板的规格 ESP32设置安装 用简单的草图测试安装 关于进一步会议的简介 第一天的资源: 第二天: 快来了.................... 对于...
osCommerce v3.0.2 changelogCategoriesCustomersServicesVerify Session IDs - if requested Session ID does not exist, create and use a new Session ID.Only call for Administration Dashboard Shortcut ...
打开代码并开始定制! 您的站点现在在http://localhost:8000 ! 如果您想了解有关如何使用配置有Gatsby主题的Gatsby入门的更多信息,可以查看此或教程。 教程并不完全适用于该入门者,但是概念
1.基于springboot websocket 定制,主要完成的功能是WebSocket session的状态管理,具备单机和集群能力。 2.可以定制自己的ServerEndPoint和WebSocketManager。使用时面向接口WebSocketManager,支持单机(基于内存...
基于springboot websocket 定制,主要完成的功能是WebSocket session的状态管理,具备单机和集群能力。 2.可以定制自己的ServerEndPoint和WebSocketManager。使用时面向接口WebSocketManager,支持单机(基于内存)...
定制的tomcat-redis-session-manager 该项目可帮助您在tomcat Web应用程序中自定义自己的Redis缓存,只需在Tomcat/conf/server.xml像这样将自己的前缀添加到redis密钥中 ...
计算机网络作业,C++编写的,类似于QQ那种但没有那么高级,有客户机服务器,debug运行
LIFT会话使任何人都可以通过LIVE在线会话从任何位置和按需从顶级教练那里访问定制的健身培训。 我们的会员可以根据自己的需要享受最高效,最具挑战性,最有趣和最安全的健身课程。 该插件适用于通过Chrome浏览器进行...
组件的html和css分离,很简洁,可随意定制-Based on c#, jquery development treeView tree components, the biggest feature is the display of the tree node state to ajax way, saved to a user session, even ...
快速,轻巧,可定制的符合* 服务器。 依靠。 使用存储客户端,授权和令牌。 var app = require ( 'diet' ) ( ) . listen ( 7000 ) var consent = require ( 'consent' ) ( ) consent ( 'app' , app ) consent ( '...