【问题标题】:User authentication via sessions in PHP, is .htaccess necessary?通过 PHP 中的会话进行用户身份验证,是否需要 .htaccess?
【发布时间】:2012-12-27 20:17:21
【问题描述】:

我想知道在 PHP 中使用会话的网站的密码保护区域是否也需要 .htaccess。我是网站密码保护区域的新手,所以尽管我已经对此进行了研究,但我仍然感到困惑。

我的客户使用的计费公司提供了一个脚本,我放置在一个特定文件夹中,允许他们将新的和更新的用户信息写入站点的用户 mysql 数据库。我想使用自己的登录和注销页面,而且我知道 HTTP 身份验证使用自己的弹出式登录框并且没有提供真正的注销方式……因此我们使用数据库来存储用户信息。

所以底线是,如果我通过数据库进行身份验证并在 PHP 中使用会话,是否需要在受保护的文件夹中添加一个 .htaccess 文件?

非常感谢!

【问题讨论】:

    标签: php mysql database authentication


    【解决方案1】:

    不,你没有。 .htaccess 文件提供对基本身份验证的访问。您所说的将由网站脚本处理。您需要记住的一件大事是始终检查页面加载是否存在有效会话,并且未能将重定向到登录页面。

    【讨论】:

    • @llion,谢谢你。我想这是要走的路,但我需要验证,再次,谢谢!至于检查有效会话的页面加载,我假设这是通过页面代码顶部的条件语句处理的?
    • 是的,php为此提供了几个函数。您很可能会使用会话令牌在用户的计算机上存储一个 cookie,并使用它从您的数据库或会话存储中检索他们的会话。
    【解决方案2】:

    如果目录中的每个文件都是通过 PHP 实现的,那么您就不需要 htaccess。但是,如果它们是需要保护的目录中的非 php 文件,则这些文件将不受保护。如果您将销售图表或类似的东西作为图像存储在文件服务器上,那么任何能够找到它们的人都可以看到这些。

    【讨论】:

    • 这是真的,但您不想同时使用这两种方法。如果每个文件都必须被锁定,那么您更可能希望实现某种 url 重写,这可能会变得混乱。
    • @Tom,非常好的信息。我所有的页面都是pagename.php,所以如果我理解正确,只要我的页面是.php,其中的任何内容都是安全的吗?如果没有,我将如何保护它们?
    • php 文件中的内容与 PHP 代码的实现一样安全。如果您的 PHP 代码没有安全性,则该文件不安全。这适用于每一页。要求用户在一个页面上登录并将他们转移到不验证登录凭据的另一个页面不是一种安全的方法。您必须在每个页面上实施安全性。这种安全性应该通过一个包含的文件来实现,以减少冗余,但仍然需要包含在每个文件中
    【解决方案3】:

    请参阅这篇关于基于 REST 的身份验证(通过 Apache)的文章:http://www.berenddeboer.net/rest/authentication.html

    正如您所说,您计划使用 php session 实现自己的身份验证系统,我假设是 mysql,那么您不需要 .htaccess 文件来完成此操作。

    就这通过 PHP 而言,我仍然使用现在经过大量修改的系统,该系统包含在站点点书 build your own website the right way 中。

    它基本上需要在控制器上加载一组函数,这些函数要么与在会话中存储信息有关,要么与数据库检查存储的信息。

    然后我可以使用这样的东西来限制对某些页面的访问,方法是将其放在其他所有页面之前:

    if (!userIsLoggedIn())
    {
        include "$docRoot/html/main/login.html.php";
        exit();
    }
    
    if (!userHasRole('Site Admin'))
    {
        $error = 'Only a website administrator may access this page, your ip address has been logged and a notification sent to our support team as this is considered as an unauthorized access attempt.';
        unset($_SESSION['loggedIn']);
        include "$docRoot/html/main/accessdenied.html.php";
        exit();
    }
    
    if (!userHasActiveAccount())
    {
        $error = 'Sorry but your account has been disabled. For futher information please contact support.';
        unset($_SESSION['loggedIn']);
        include "$docRoot/html/main/accessdenied.html.php";
        exit();
    }
    

    【讨论】:

    • 非常感谢所有这些。我猜这就是 llion 提到的关于在页面加载时验证有效会话的内容。
    • 很高兴,希望它有意义,是的,这些都是他/她在这方面谈论的例子。祝你好运!
    猜你喜欢
    • 2012-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-29
    • 1970-01-01
    • 2015-10-11
    • 2013-12-29
    • 1970-01-01
    相关资源
    最近更新 更多