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

  • 相关阅读:
    用Python随机生成一个六位验证码(验证码由数字和字母组成(大小写字母))
    0.4 uwsgi和nginx部署常见问题及解决
    Android小笔记
    Android之背景透明度
    Android开发中的错误总结
    Android “再按一次退出“
    java数组对象的复制
    Android之OpenCv
    学习资料
    Android常用正则表达式
  • 原文地址:https://www.cnblogs.com/dee0912/p/5140432.html
Copyright © 2011-2022 走看看