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

预防 Session 劫持与 Session 固定攻击的更多相关文章

  1. 会话固定攻击 - yxcms session固定漏洞

    目录 会话固定攻击 e.g. yxcms session固定攻击 分析 了解更多 会话固定攻击 Session fixation attack(会话固定攻击)是利用服务器的session不变机制,借他 ...

  2. PHP漏洞全解(七)-Session劫持

    本文主要介绍针对PHP网站Session劫持.session劫持是一种比较复杂的攻击方法.大部分互联网上的电脑多存在被攻击的危险.这是一种劫持tcp协议的方法,所以几乎所有的局域网,都存在被劫持可能. ...

  3. 漏洞:会话固定攻击(session fixation attack)

    什么是会话固定攻击? 会话固定攻击(session fixation attack)是利用应用系统在服务器的会话ID固定不变机制,借助他人用相同的会话ID获取认证和授权,然后利用该会话ID劫持他人的会 ...

  4. session劫持以及预防

    session劫持是一种广泛存在的比较严重的安全威胁,在session技术中,客户端和服务端通过session的标识符来维护会话, 但这个标识符很容易就能被嗅探到,从而被其他人利用.它是中间人攻击的一 ...

  5. 跨站脚本攻击XSS(二)——session劫持

    转载自:http://www.cnblogs.com/dolphinX/p/3403027.html 在跨站脚本攻击XSS中简单介绍了XSS的原理及一个利用XSS盗取存在cookie中用户名和密码的小 ...

  6. web系统之session劫持解决

    session劫持是一种比较复杂的攻击方法.大部分互联网上的电脑多存在被攻击的危险.这是一种劫持tcp协议的方法,所以几乎所有的局域网,都存在被劫持 可能. 两台主机要想进行TCP通信,必须经过一个三 ...

  7. SESSION劫持

    服务端和客户端之间是通过session(会话)来连接沟通.当客户端的浏览器连接到服务器后,服务器就会建立一个该用户的session.每个用户的session都是独立的,并且由服务器来维护.每个用户的s ...

  8. XSS危害——session劫持

    在跨站脚本攻击XSS中简单介绍了XSS的原理及一个利用XSS盗取存在cookie中用户名和密码的小例子,有些同学看了后会说这有什么大不了的,哪里有人会明文往cookie里存用户名和密码.今天我们就介绍 ...

  9. cookie窃取和session劫持

    Updates 2014-08-17 感谢@搞前端的crosser的提醒,加入了HTTP Response Splitting的内容. 此篇文章的Presentation戳这里. 一.cookie的基 ...

随机推荐

  1. [工作中的设计模式]桥接模式bridge

    一.模式解析: 策略模式一节讲过,通过扩展持有者,使持有者形成抽象类,然后实现多个具体持有者,策略模式可以转化为桥接模式. 桥接模式定义为:将抽象部分与实现部分分离,使它们都可以独立的变化,在软件系统 ...

  2. 请将 php.ini 中的 short_open_tag 设置为 On,否则无法继续安装。

    安装的wamp套件,访问http://localhost/Discuz/install/index.PHP进行安装操作,提示 对不起,请将 php.ini 中的 short_open_tag 设置为 ...

  3. The 2015 China Collegiate Programming Contest L. Huatuo's Medicine hdu 5551

    Huatuo's Medicine Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others ...

  4. Diophantus of Alexandria[HDU1299]

    Diophantus of Alexandria Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Ot ...

  5. 【转】敏捷开发 Scrum 总结

    转:http://www.open-open.com/lib/view/open1330413325514.html 最近把之前学习 Scrum 的资料整理为一篇文档,在接下来的团队和项目开发中,根据 ...

  6. ACM 兄弟郊游问题

    兄弟郊游问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:2   描述 兄弟俩骑车郊游,弟弟先出发,每分钟X米,M分钟后,哥哥带一条狗出发.以每分钟Y米的速度去追弟弟,而狗则以 ...

  7. 【JAVA】JMX简单使用方法

    [BEAN] 配置   <!-- JMX 对应的接口服务--> <bean id="emailInterfaceServer" class="com.s ...

  8. DB2支持的三种表空间SMS、DMS、DMS的自动存储

    DB2支持的三种表空间SMS.DMS.DMS的自动存储 DB2中,表空间是数据库与这个数据库中存储的表之间的逻辑层.表空间在数据库中创建,表在表空间中创建.容器是一个物理存储设备.它可以由目录名.设备 ...

  9. 在Linux中安装Tomcat

    带Linux的虚拟机中安装Tomcat 一.从官方网站上下载tomcat软件包.http://tomcat.apache.org/ apache-tomcat-7.0.33.tar.gz 二.下载到本 ...

  10. GO语言练习:第二个工程--模拟音乐播放器

    1.代码 2.编译及运行 1.目录结构 1.1) $ tree . ├── mplayer.go └── src ├── mlib │   ├── manager.go │   └── manager ...