CMS admin作为config.php vs users表的一部分

时间:2016-03-05 03:36:59

标签: php

我正在建立一个网站,作为作者,我希望能够在线登录并发布新文章。我希望其他用户也能登录,以便他们对我的帖子发表评论。但是,我不希望在我的网站上有“网站管理员”链接,我也不想通过网址访问它,例如“www.example.com/admin”。我不希望公共用户看到链接或访问管理员网址。

所以我想将管理员ID添加为我的USERS表中的一个用户。对于该管理员ID,我将IS_ADMIN列设置为TRUE。所有其他用户都将为FALSE。在这种情况下,每当我以管理员ID身份登录时,我的页面将检查IS_ADMIN是否为TRUE,那么我只有那个“站点管理员”链接。如果其他用户登录,他们将看不到“站点管理”链接,因为他们的IS_ADMIN为FALSE。

以管理员身份登录后,我的网址中仍会显示www.example.com/admin.php。但其他人可能只需输入www.example.com/admin.php。

这是安全的做法吗?我真的无法决定如何处理这个问题。请指教。

2 个答案:

答案 0 :(得分:2)

我将如何做到如下:

  1. 添加user_type列(可以包含" admin","编辑器"和"标准"类型)或只需使用admin_flag列管理员的值为1,非管理员的值为0。

  2. 在商店中登录$ _SESSION变量中的所有必要用户凭据,例如$ _SESSION [' auth'] = 1(成功登录)和$ _SESSION [' admin&#39 ;] = 1(管理员用户)。这假设您使用的是admin_flag列方法。如果您更喜欢该方法,可以将其更改为user_type和相关值。

  3. 在任何管理页面(例如admin.php)的顶部,检查$ _SESSION [' admin']是否不存在或者是否设置为1.如果是,将用户重定向回主页(和/或显示错误消息,告知他们无法访问此页面)。您的代码应如下所示:

    if (empty($_SESSION['admin']) || $_SESSION['admin'] != 1){
        header("Location: index.php");
        exit();
    }
    
  4. 重要提示:确保在标题重定向之后有一个exit()语句,否则会打开发送给用户浏览器的其余脚本的潜在安全问题。

    您可以使用$ _SESSION [' auth']变量执行类似的操作,以防止未经身份验证的用户在您的网站上执行特定操作(或者还要将其作为上述if语句的附加要求)。 / p>

答案 1 :(得分:1)

将LINK隐藏到管理页面是不安全的 - 非管理员用户只能使用完整路径导航到该页面,这是正确的。

您还应该在渲染admin.php时检查用户的管理员,如果他们不是您,也应该重定向。

然而,说实话,有很多开源CMS,具有强大的功能和经过实战考验的安全性,我倾向于认为你应该使用其中之一。

从头开始滚动安全性可能具有指导意义,但实际上将其置于在线状态会让您的服务器受到损害。

相关问题