Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1767660
  • 博文数量: 323
  • 博客积分: 5970
  • 博客等级: 大校
  • 技术积分: 2764
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-03 23:13
文章分类

全部博文(323)

文章存档

2018年(2)

2017年(11)

2016年(10)

2015年(27)

2014年(2)

2013年(30)

2012年(197)

2011年(44)

分类: Java

2015-11-12 18:17:55

如何防止Session伪造攻击  


Session伪造攻击是一种非常流行的针对session的攻击方式.它之所以流行的主要原因是:它是一个攻击者获得一个有效的SESSION ID(标识符)最简单的方法.使用这种方法,可以模仿当前用户的SESSION ID,伪装成这个用户,然后进一步进行SESSION劫持攻击.


任何促使受害用户使用攻击者提供的SESSION ID的方法都可以称之为SESSION伪造攻击,最简单的例子就是在一个链接中嵌入SESSION标识符:


登录


受害者点击了这个链接后将会把SESSION ID设置为123123.而且如果受害者在这个时候继续登录,攻击者就能够劫持他的SESSION用来提升自己的权限级别.甚至在购物类型网站中盗取他人帐户钱财.


这种攻击方法有很多变体,有一些使用COOKIES来达到自己的攻击目的,例如我在前一篇博文中写到的利用COOKIE和SESSION联用实现session跨域,那里就是用COOKIE来存储SESSION ID的,攻击者伪造COOKIE也可以变成受害者的身份去登录他的帐户.幸运的是针对这些攻击的防范,php也给了我们非常简单易懂并且通用的方法来处理.无论什么时候,只要有权限级别的改变,如果一个用户登录的时候,就用session_regenerate_id()函数来重新生成SESSION ID,无论是用POST/GET或者COOKIE方式传递SESSION ID 这个函数都适用.


代码片段:




<?php
if(checklogin($user_name,$password){
$_SESSION['auth'] = TRUE;
session_regenerate_id();
}
?>


这样可以有效的避免SESSION伪造攻击,可以确保每个用户登录时(或者有权限提升时)都被分配新的随机的SESSION ID.
阅读(2078) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~