有关session安全的那些事儿
1.session劫持
动机:想要确保攻击者无法访问站点其他用户的session
方案:只允许通过cookie来传递sessionID,同时生成一个由URL传递的额外的session记号(token),只有当请求包含有效的sessionID和有效的session记号时,才可以访问该session
代码:
1 <?php 2 ini_set('session.use_only_cookies',true); 3 session_start(); 4 $salt = '!@@##~~WEQQ'; 5 $tokenstr = (str)data('W').$salt; 6 $token = md5($tokenstr); 7 if(!isset($_REQUEST['token'])||$_REQUEST['token']!=$token){ 8 //提示登录 9 exit; 10 } 11 $_SESSION['token'] = $token; 12 output_add_rewrite_var('token',$token); 13 ?>
output_add_rewrite_var函数说明
官方:添加URL重写器的值(Add URL rewriter values)
说明:bool output_add_rewrite_var ( string $name , string $value )
此函数给URL重写机制添加名/值对。 这种名值对将被添加到URL(以GET参数的形式)和表单(以input隐藏域的形式),当透明URL重写用 session.use_trans_sid 开启时同样可以添加到session ID。 要注意,绝对URL(http://example.com/..)不能被重写。适用范围:(PHP 4 >= 4.3.0, PHP 5)
如果你的php版本低于4.3.0,对不起这个方法还不能生效,不过不用着急,我们有替代方法
上代码:
1 <?php 2 ini_set('session.use_only_cookies',true); 3 session_start(); 4 $salt = '!@@##~~WEQQ'; 5 $tokenstr = (str)data('W').$salt; 6 $token = md5($tokenstr); 7 if(!isset($_REQUEST['token'])||$_REQUEST['token']!=$token){ 8 //提示登录 9 exit; 10 } 11 $_SESSION['token'] = $token; 12 ob_start('inject_session_token'); 13 function inject_session_token($buffer){ 14 $hyperlink_pattern = "/<a[^>]+href=\"([^\"]+)/i"; 15 preg_match_all($hyperlink_patten,$buffer,$matches); 16 foreach($matches[1] as $link){ 17 if(strpos($link,"?")===false){ 18 $newlink = $link.'?token='.$_SESSION['token']; 19 }else{ 20 $newlink = $link.='&token='.$_SESSION['token']; 21 } 22 $buffer = str_replace($link,$newlink,$buffer); 23 } 24 return $buffer; 25 } 26 ?>
待续……
转载于:https://www.cnblogs.com/MRPUNK/archive/2013/04/11/3015744.html
有关session安全的那些事儿相关推荐
- 分布式系统里session同步
几周前,有个盆友问老王,说现在有多台服务器,怎么样来解决这些服务器间的session同步问题?老王一下就来精神了,因为在n年以前,老王还在学校和几个同学一起所谓创业的时候,也遇到了类似的问题.当时查了 ...
- 让 Objective-C 框架与 Swift 友好共存的秘籍
Python实战社群 Java实战社群 长按识别下方二维码,按需求添加 扫码关注添加客服 进Python社群▲ 扫码关注添加客服 进Java社群▲ 作者:江湖人称 "七叔" 其实就 ...
- linux加硬盘方法,linux系统添加硬盘方法
SQL SQL语句的增删改查 一.增:有2种方法 1.使用insert插入单行数据: 语法:insert [into] [列名] values 例:insert into Strdent ... Ma ...
- 2022面试200题目和答案分布式+微服务+MYSQL+Redis+JVM+Spring
200题目和答案分布式+微服务+MYSQL+Redis+JVM+Spring等等 带图MD在资源https://download.csdn.net/download/m0_47987937/86509 ...
- cookie和session的那些事儿
COOKIE介绍 cookie 常用于识别用户.cookie 是服务器留在用户计算机中的小文件.每当相同的计算机通过浏览器请求页面时,它同时会发送 cookie.通过 PHP,您能够创建并取回 coo ...
- Cookie、Session、Token那点事儿
前言:新公司项目中使用到了Cookie,在各大Android技术讨论群向前辈们取经讨论这cookie.session.token这仨哥们的时候,很多开发者说法不一各抒已见,所以是时候回顾下http基础 ...
- Cookie和Session、SessionID的那些事儿
一.Cookie的定义 指某些网站为了辨别用户身份.进行session跟踪而存储在用户本地终端上的数据(通常经过加密).也就是说如果知道一个用户的Cookie,并且在Cookie有效的时间内,就可以利 ...
- [ web基础篇 ] session,cookie,token 那些事儿 ?
- Token ,Cookie、Session傻傻分不清楚?
点击上方蓝色"视学算法",选择"设为星标" 作者 | 王菜鸟1993 来源 | cnblogs.com/JamesWang1993/p/8593494.html ...
- 深夜,我偷听到程序员要对session下手……
我是一个web服务器 我是一个web服务器,我的工作是给人类提供上网服务,我每天要为数以万计的人提供网页浏览服务. 已经是深夜了,我还在和手下几个兄弟为了一件事紧张讨论着. "老大,现在咱们 ...
最新文章
- virtualC++打开汇编语言代码
- 3.递归猴子吃桃问题
- uml 类图_UML-类图
- c lambda表达式 select 改变字段名称_大神是如何学习 Go 语言之浅谈 select 的实现原理...
- VisualStudio卸载后无法再次安装的解决方法
- UVA11019 Matrix Matcher【hash傻逼题】【AC自动机好题】
- java父类的私有方法可以被继承吗_简单通俗的解释java中的继承
- 自定义UICollectionViewFlowLayout
- 本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印
- gan处理自己的数据集_使用StyleGAN训练自己的数据集.md
- 可正常访问的 高校2.5D 地图
- 架设国外服务器怎么维护,架设海外服务器流程分享
- 福特汉姆大学计算机科学专业,福特汉姆大学计算机科学专业
- 深度搜索—-深度搜索解决矩阵搜索问题(水洼数计算)
- 请收藏 Navicat 热门话题 | 精选
- Teamwork(The first day of the team)
- MSN Messenger聊天机器人颁奖典礼
- python autocad显示_通过Python打开Autocad的新实例
- 解决Windows7右键菜单出现乱码的详细步骤
- linux 自动隐藏任务栏_如何自动隐藏Windows任务栏