有关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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值