PHP漏洞全解(七)-Session劫持(2)
登录以后显示
开始攻击
//attack.php
<?php
// 打开Session
session_start();
echo "目标用户的Session ID是:" . session_id() . "<br />";
echo "目标用户的username是:" . $_SESSION["username"] . "<br />";
echo "目标用户的password是:" . $_SESSION["password"] . "<br />";
// 将book的数量设置为2000
$_SESSION["book"] = 2000;
?>
提交 http://localhost/attack.php?PHPSESSID=5a6kqe7cufhstuhcmhgr9nsg45 此ID为获取到的客户session id,刷新客户页面以后
客户购买的商品变成了2000
session固定攻击
黑客可以使用把session id发给用户的方式,来完成攻击
http://localhost/index.php?user=dodo&PHPSESSID=1234 把此链接发送给dodo这个用户显示
然后攻击者再访问 http://localhost/attack.php?PHPSESSID=1234 后,客户页面刷新,发现
商品数量已经成了2000
防范方法
1)定期更改session id
函数 bool session_regenerate_id([bool delete_old_session])
delete_old_session为true,则删除旧的session文件;为false,则保留旧的session,默认false,可选
在index.php开头加上
<?php
session_start();
session_regenerate_id(TRUE);
......
这样每次从新加载都会产生一个新的session id
2)更改session的名称
session的默认名称是PHPSESSID,此变量会保存在cookie中,如果黑客不抓包分析,就不能猜到这个名称,阻挡部分攻击
<?php
session_start();
session_name("mysessionid");
......
3)关闭透明化session id
透明化session id指当浏览器中的http请求没有使用cookies来制定session id时,sessioin id使用链接来传递;打开php.ini,编辑
session.use_trans_sid = 0
代码中
<?php
int_set("session.use_trans_sid", 0);
session_start();
- 最新评论