CMS管理员作为config.php vs users表的一部分

CMS管理员作为config.php vs users表的一部分,php,Php,我正在建立一个网站,作为作者,我希望能够在线登录并发布新文章。我希望其他用户也可以登录,这样他们就可以对我的帖子发表评论。然而,我不想在我的网站上有一个“站点管理员”链接,我也不想通过url访问它,比如说“www.example.com/Admin”。我不希望公共用户看到链接或访问管理员url 因此,我正在考虑将admin id添加为我的users表中的一个用户。对于该管理员id,我将有一个IS_ADMIN列设置为TRUE。所有其他用户都将有FALSE。在这种情况下,每当我以管理员id登录时,我

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

因此,我正在考虑将admin id添加为我的users表中的一个用户。对于该管理员id,我将有一个IS_ADMIN列设置为TRUE。所有其他用户都将有FALSE。在这种情况下,每当我以管理员id登录时,我的页面都会检查IS_admin是否为TRUE,然后只有我才有“Site admin”链接。如果其他用户登录,他们将看不到“站点管理员”链接,因为他们的IS_Admin为FALSE

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


这样做安全吗?我真的无法决定如何处理这件事。请给出建议。

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

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

然而,老实说,有太多的开源CMSE具有强大的功能和经过战斗测试的安全性,我倾向于认为您应该使用其中的一种


从头开始滚动安全性可能是有益的,但将其在线直播会要求您的服务器受到威胁。

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

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

然而,老实说,有太多的开源CMSE具有强大的功能和经过战斗测试的安全性,我倾向于认为您应该使用其中的一种


从头开始滚动安全性可能很有帮助,但将其在线直播会要求您的服务器受到威胁。

我将如何做到这一点,如下所示:

  • 添加一个用户类型列(可以包括“管理员”、“编辑器”和“标准”类型),或者简单地使用一个管理员标志列,管理员的值为1,非管理员的值为0

  • 登录后,将任何必要的用户凭据存储在$_会话变量中,例如$_会话['auth']=1(成功登录)和$_会话['admin']=1(管理员用户)。这假设您正在使用admin_标志列方法。如果您喜欢该方法,可以将其更改为用户类型和相关值

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

    if (empty($_SESSION['admin']) || $_SESSION['admin'] != 1){
        header("Location: index.php");
        exit();
    }
    
  • 重要提示:确保在头重定向之后有一个exit()语句,否则这会导致脚本的其余部分发送到用户浏览器时出现潜在的安全问题


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

    我将如何执行此操作,如下所示:

  • 添加一个用户类型列(可以包括“管理员”、“编辑器”和“标准”类型),或者简单地使用一个管理员标志列,管理员的值为1,非管理员的值为0

  • 登录后,将任何必要的用户凭据存储在$_会话变量中,例如$_会话['auth']=1(成功登录)和$_会话['admin']=1(管理员用户)。这假设您正在使用admin_标志列方法。如果您喜欢该方法,可以将其更改为用户类型和相关值

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

    if (empty($_SESSION['admin']) || $_SESSION['admin'] != 1){
        header("Location: index.php");
        exit();
    }
    
  • 重要提示:确保在头重定向之后有一个exit()语句,否则这会导致脚本的其余部分发送到用户浏览器时出现潜在的安全问题


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

    首先是查询此项是否与管理员id相同,然后打开此页面,否则/elseif打开此页面,很抱歉,你的答案甚至与我的问题无关。你的意思是:“一旦我以管理员身份登录,我的url中仍然会有www.example.com/admin.php。但其他人可能只需键入www.example.com/admin.php。”首先是询问这是否与管理员id相同,然后打开此页面,否则/elseif打开此页面,很抱歉,你的答案甚至与我的问题无关。你说的“一旦我以管理员身份登录,我的url中仍然会有www.example.com/admin.php。但其他人可能只需键入www.example.com/admin.php。”这是什么意思很高兴我能帮忙。:)