2

我是 php 编码的新手,基本上我正在创建一个用户面板,用户可以在其中登录并从那里访问他们的仪表板,让他们做事。

我正在使用 php 会话来执行此操作,并且基本上在我放置的仪表板的顶部:

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

这使得未登录的用户被重定向到 index.php。

问题是用户可以从仪表板执行某些命令,例如:/dashboard.php?reset=true

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

有谁知道如何修复这个允许人们这样做的安全漏洞?

谢谢

4

4 回答 4

2

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

如果用户是管理员,最好通过声明会话变量来验证。

在重定向之前登录时:

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

在“执行文件”中:

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

更多安全提示:链接 它将为您指出一些安全问题

于 2012-11-20T05:33:49.620 回答
0

可能是您使用的是 php 5.4.x

session_is_registered自 PHP 5.3.0 起已弃用,自 PHP 5.4.0 起已移除。

使用isset($_SESSION['myusername'])代替session_is_registered

编辑

exit应始终在从标头重定向之后放置,die也可以使用。

于 2012-11-20T05:26:28.053 回答
0

I guess that by reset you mean password. Just get that part to ask them for the old password as well as the new old. And to stop robots use summat like CAPTCHA,

于 2012-11-20T05:17:13.900 回答
0

您需要在通话 后使用dieexit或其他方式终止。不会停止执行,所以即使它正在发送 Location: 重定向,它也会继续通过你的代码。header()header()

于 2012-11-20T05:20:24.093 回答