攻击者预先设定session id,让合法用户使用这个session id来访问被攻击的应用程序,一旦用户的会话ID被成功固定,攻击者就可以通过此session id来冒充用户访问应用程序。
举例
- 攻击者访问网站 http:///www.bank.com ,获取他自己的session id,如:SID=123;
- 攻击者给目标用户发送链接,并带上自己的session id,如:http:///www.bank.com/?SID=123 ;
- 目标用户点击了 http:///www.bank.com/?SID=123 ,像往常一样,输入自己的用户名、密码登录到网站;
- 由于服务器的session id不改变,现在攻击者点击 http:///www.bank.com/?SID=123 ,他就拥有了目标用户的身份,可以为所欲为了。
防范方法
- 定期更改session id
session_regenerate_id(TRUE); //删除旧的session文件,每次都会产生一个新的session id。默认false,保留旧的session
- 更改session的名称
- session的默认名称是PHPSESSID,此变量会保存在cookie中, 如果攻击者不抓包分析,就不能猜到这个名称,阻挡部分攻击
session_name("mysessionid");
- 关闭透明化session id
- 透明化session id指当浏览器中的 http请求 没有使用cookie来制定session id时,sessioin id使用链接来传递
int_set("session.use_trans_sid", 0);
- 只从cookie检查session id
int_set("session.use_cookies", 1); //表示使用cookies存放session id
int_set("session.use_only_cookies", 1); //表示只使用cookies存放session id
- 使用URL传递隐藏参数
$sid = md5(uniqid(rand()), TRUE));
$_SESSION["sid"] = $sid; // 攻击者虽然能获取session数据,
// 但是无法得知$sid的值,只要检查sid的值,
// 就可以确认当前页面是否是web程序自己调用的