zoukankan      html  css  js  c++  java
  • 预防 Session 劫持与 Session 固定攻击

    一、预防 Session 劫持

    要求:

    ① 只允许通过 Cookie 来传递 SessionID

    ② 生成一个由 URL 传递的唯一标识作为 Session 的标记(token)

    当请求同时包含有效的 SessionID 和 有效的 Session token 时,才能进一步访问该 Session

    代码:

        $salt = 'mySessionToken';
        $tokenstr = date('W').$salt;
        $token = md5($tokenstr); //①
    
        if(!isset($_REQUEST['token']) || $_REQUEST['token'] != $token) { //②
            //提示登陆
            exit;
        }
    
        $_SESSION['token'] = $token; output_add_rewrite_var('token', $token); //③

    说明:

    ① token 包含两个部分,盐(一个自定义的字符串)和一个在一段时间内不发生变化的字符串(可以用时间日期函数)

    ② 当请求的 URL 中不包含 token 或者 token 不正确时,提示用户登录

    output_add_rewrite_var 方法用于给 URL 重写机制添加新的键/值参数,例如原 URL 为 http://serverName,使用 output_add_rewrite_var('token', $token) 后 URL 变成了 http://serverName/token/b12a9d8237b3b29dd94a06e42a7d9b5f

    二、预防 Session 固定攻击

    要求:

    ① 只允许通过 Cookie 来传递 SessionID,使攻击者基于 URL 攻击的可能性为零

    ② 在一定时间内生成新的有效 SessionID,使攻击者获取有效 SessionID 的机会降低

    代码:

        if(!isset($_SESSION['generated']) || $_SESSION['generated'] < (time() - 30)) { //
            session_regenerate_id(true); //
            $_SESSION['generated'] = time(); //
        }

    说明:

    ① 设置 Session 定期更换的时间为 30 秒

    ② session_regenerate_id 方法可以在不修改当前会话数据的前提下使用新的 SessionID 代替原有的 SessionID;使用 true 作为参数时,原有的 session 文件会被删除。

    参考《PHP经典实例》

  • 相关阅读:
    JVM学习笔记之认识JDK(一)
    C#发送邮件异常:根据验证过程,远程证书无效
    windows下使用mysql双机热备功能
    批处理实现mysql的备份
    WebApi FormData+文件长传 异步+同步实现
    Oracle中已知字段名查询所在的表名
    mstsc遇到CredSSP加密Oracle修正
    使用subgit进行svn迁移至git(branch,tags)
    使用guava进行对字符串的加锁
    使用spring-data-solr做solr客户端
  • 原文地址:https://www.cnblogs.com/dee0912/p/5140432.html
Copyright © 2011-2022 走看看