在显示页面之前确保用户经过身份验证的好方法是?

时间:2015-08-04 09:58:11

标签: php security session-variables

我有一个带登录表单的Web应用程序。当用户成功登录时,应用程序会生成包含其用户ID的会话变量。然后它显示一个主菜单,其中有几个指向.php页面的链接,其中一些页面对所有用户都不一样,例如“user_profile.php”页面......等等。

如果未经过身份验证的用户知道这些页面的名称,并尝试显示这些页面,我想知道如何保护这些内容?

到目前为止,我有这样的事情:

//if the session is not set, forces the user to go back to the main page
if (!isset($_SESSION['auth'])) {
        header("Location: index.php");
        exit();
    }
else {
//display the page, with PHP, HTML, JS...
}

在这种情况下,安全级别是否“可接受”?如果没有,我该怎么做才能提高安全性?

3 个答案:

答案 0 :(得分:2)

您可以按照以下步骤操作:

  1. 使用重定向技术/ htaccess不显示确切的页面名称。

  2. 由于您可以在会话和会议中生成会话ID存储在urls中传入get变量。如果任何人想要非法访问页面,他必须首先记住页面重定向。会话ID。

  3. 在每个页面中调用登录功能以检查用户是否已登录,如果是,则已分配系统生成的会话ID。

  4. 如果有人登录,您可能会收到应用通知。

  5. 安全级别随着您的要求或客户要求而增加。人们每天都在努力在网络应用中嵌入越来越多的安全性。

答案 1 :(得分:0)

如果用户必须经过身份验证以及是否真实,您可以签入特定的类构造函数。这为您提供了安全页面或公共页面的灵活性。

更一般地说,您可以在包含页面之前检查它,例如index.php,请参阅以下伪代码:

if (!authenticated)
    Redirect to login

Continue

但如果会话只包含userId,那听起来不太安全。最好存储加密的会话,令牌,等等。

在此处阅读更多内容:Developing a secure PHP login and authentication strategy

答案 2 :(得分:-2)

我猜安全级别是可以接受的,我认为它不需要更多。 为了保护所有其他页面,我建议在每个页面上查询Session。 当非用户想要进入页面时,他会被定向到登录页面。