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 ?>

    待续……

  • 相关阅读:
    centos7防火墙那些事
    CentOS7安装mysql数据库
    git回滚到任意版本
    SQL Server查看所有表大小、表行数和占用空间信息
    windows地址转发
    Apache和tomcat服务器使用ajp_proxy模块
    jdk分析工具:jps和jstack
    centos下linux运行asp网站搭建配置-mono+nginx
    reader
    solr课程学习系列-solr服务器配置(2)
  • 原文地址:https://www.cnblogs.com/MRPUNK/p/3015744.html
Copyright © 2011-2022 走看看