2012-11-20 54 views
2

我是新来的PHP编码,基本上我创建一个用户面板,用户登录,从那里他们访问他们的仪表板,让他们做事情。PHP会话安全缺陷?

我使用PHP的会议要做到这一点,基本上在仪表板的顶部,我把:

session_start(); 
if(!session_is_registered(myusername)){ 
header("location:index.php"); 

这使得它如此谁没有登录的用户是重新定向到索引。 PHP。

的问题是,有某些命令用户可以从仪表板做的,是这样的: /dashboard.php?reset=true

而且做这些命令不需要某种原因活动会话。任何人都可以转到/dashboard.php?reset=true并重置所有内容,而无需激活会话!

有谁知道如何解决这个安全漏洞,允许人们做到这一点?

感谢

+1

这听起来像是在执行'/dashboard.php?reset = true'时的安全缺陷,而不是PHP。根据定义,会话要求客户端为每个请求(通过cookie或查询字符串)提供一个令牌。这并不意味着在采取行动之前你必须寻找它。你可以发布那些代码(进行重置)以及其他安全检查吗?问题可能在于此。 – jheddings

+2

缺少'出口;'。可以肯定的是,这不是如何使用['session_is_registered'](http://php.net/session_is_registered)(注意过去式)。 – mario

+0

@Mario - 这不就是答案吗? – Robbie

回答

0

我想通过reset你的意思是密码。只要拿到那个部分就可以问他们旧密码以及新旧密码。并且要停止机器人使用类似CAPTCHA的summat,

0

您需要输入dieexit或以其他方式终止您的header()调用。 header()不会停止执行,因此即使它正在发送Location:重定向,它也将继续通过您的代码进行下载。

+0

这个修复了这个问题,非常感谢 – user1837725

0

可能是你正在使用PHP 5.4.x版本

session_is_registered已被弃用的PHP 5.3.0和去除PHP 5.4.0的。

使用isset($_SESSION['myusername'])而不是session_is_registered

编辑

exit应始终把从头重定向后,die也能工作。

+0

isset($ _ SESSION ['myusername'])函数在5.3.0上还能工作吗? – user1837725

+0

当然,是...... !! – Ravi

+0

非常感谢他的工作,这个网站是伟大的,我会坚持! – user1837725

2

快速回答: 你可以把相同的代码放在/dashboard.php中?文件

更好 如果用户是管理员通过声明会话变量verfy。

重定向之前登录的时候:

session_start(); 
$_SESSION['is_admin']="yes" ; 

在 “可执行文件”:

if(isset() && $_SESSION['is_admin'] == "yes") 
{ 
    //do your thing 
} 
else 
{ 
    echo : "you are not allowed to do that"; 
} 

更多安全提示:link 会指出一些安全问题,为您

+0

,因为它由Dev指出不要忘记开始会议 – bleuscyther