zoukankan      html  css  js  c++  java
  • 有关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 ?>

    待续……

  • 相关阅读:
    元数据Metadata
    博客园如何使用MarkDown
    zookeeper集群搭建
    Java 疑问自问自答
    R中rep函数的使用
    R中unlist函数的使用
    Windows7 系统 CMD命令行,点阵字体不能改变大小以及中文乱码的问题
    C# ConfigurationManager不存在问题解决
    Servlet中的请求转发RequestDispatcher接口的forword与Include的区别
    Servlet中的乱码问题及解决办法
  • 原文地址:https://www.cnblogs.com/MRPUNK/p/3015744.html
Copyright © 2011-2022 走看看