CMS 管理员作为配置.php与用户表的一部分



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

所以我正在考虑将管理员 ID 添加为我的 USERS 表中的用户之一。我将为该管理员 ID 设置一个 TRUE IS_ADMIN列。 所有其他用户都将有 FALSE。 在这种情况下,每当我以管理员ID登录时,我的页面都会检查IS_ADMIN是否为TRUE,那么只有我才能拥有"站点管理员"链接。 如果其他用户登录,他们不会看到"站点管理员"链接,因为他们的IS_ADMIN为 FALSE。

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

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

我将如何做到这一点:

  1. 添加user_type列(可以包括"管理员"、"编辑器"和"标准"类型),或者仅使用值为 1 的 admin_flag 列(

  2. 对于管理员),0(对于非管理员)。
  3. 登录后,将任何必要的用户凭据存储在 $_SESSION 变量中,例如 $_SESSION['auth'] = 1(成功登录)和 $_SESSION['admin'] = 1(管理员用户)。这假定您使用的是admin_flag列方法。如果您更喜欢该方法,可以将其更改为user_type和相关值。

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

    if (empty($_SESSION['admin']) || $_SESSION['admin'] != 1){
        header("Location: index.php");
        exit();
    }
    

重要提示:请确保在标头重定向后有一个 exit() 语句,否则这会打开脚本的其余部分发送到用户浏览器的潜在安全问题。

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

仅隐藏指向管理页面的链接是不安全的 - 您是正确的,非管理员用户可以使用完整路径导航到该页面。

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

但是,老实说,有很多开源CMS具有强大的功能和经过实战测试的安全性,我倾向于认为您应该使用其中之一。

从头开始滚动安全性可能很有启发性,但将其上线是要求让您的服务器受到损害。

相关内容

最新更新