码迷,mamicode.com
首页 > 其他好文 > 详细

预防 Session 劫持与 Session 定置攻击

时间:2016-01-19 00:14:44      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:

一、预防 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(); //
        $_SESSION[‘generated‘] = time(); //
    }

说明:

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

② session_regenerate_id 方法可以在不修改当前会话数据的前提下使用新的 SessionID 代替原有的 SessionID

 

参考《PHP经典实例》

预防 Session 劫持与 Session 定置攻击

标签:

原文地址:http://www.cnblogs.com/dee0912/p/5140432.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!