• 预防 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经典实例》

  • 相关阅读:
    http请求工具类
    java订单号生成
    SpringUtil获取Spring容器对象
    git push的日志展示问题
    nodejs环境搭建,淘宝镜像cnpm
    csdn里面代码块颜色
    nginx简单使用
    vue项目打包后字体文件路径出错的解决办法
    VUE 爬坑之旅 -- 用 ES6 语法写一个工具类,并全局引用
    VUE 爬坑之旅 -- 用 ES6 语法写一个工具类,并全局引用
  • 原文地址:https://www.cnblogs.com/dee0912/p/5140432.html
Copyright © 2020-2023  润新知