【问题标题】:Is it common to store a users password in a PHP Session?在 PHP 会话中存储用户密码是否常见?
【发布时间】:2010-07-01 15:25:15
【问题描述】:

这里是 php 会话的新手。我存储的用户数据非常少,也不是很敏感,但我当然仍然想要一个安全的站点。我已经用盐将他们的密码哈希存储在我的数据库中。

我是否需要在我网站的每个页面上使用他们的密码来验证用户,或者这是否有点矫枉过正?换句话说,如果他们已经成功“登录”并且我已经将他们的用户名存储在一个 php 会话中,那么他们就足以让他们四处漫游,网站知道他们是谁?

我问是因为在会话中存储用户密码似乎不是最好的主意。这是真的吗?

【问题讨论】:

    标签: php security session


    【解决方案1】:

    您不需要对每个请求进行身份验证,但您确实需要对每个请求进行授权

    Authentication 是您根据数据库验证用户的用户名/密码的地方。一旦他们成功通过身份验证,您只需将他们的用户 ID(或用户名)存储在会话中。

    在每个后续请求中,检查以确保当前会话已授权查看请求的内容。在您的情况下,您可能只需要确保会话中有一个有效的用户 ID...您不必对数据库执行任何操作。

    您可以使用类似于以下的功能对每个请求进行授权:

    function isAuthorized() {
        return isset($_SESSION['user_id']) && ($_SESSION['user_id'] != 0);
    }
    

    您可以通过在数据库中管理您自己的会话数据来使这一过程更加安全,然后您就不必太相信 cookie,它们可以被(恶意)用户交易/窃取/等等。但对于大多数网络应用来说,这通常是多余的。

    【讨论】:

      【解决方案2】:

      不要存储密码。相反,将一个身份验证令牌存储在单独的表中,您可以检查它是否存在。

      【讨论】:

        【解决方案3】:

        我不会将密码存储在会话中,您可以只存储他们已在会话中登录。

        $_SESSION['uerlogged'] = $mytoken;
        

        然后每个页面加载检查是否设置了$_SESSION['userlogged']

        您可能还需要考虑为会话劫持添加预防措施看看 - PHP: Preventing Session Hijacking with token stored as a cookie?

        【讨论】:

          【解决方案4】:

          实际上没有必要在会话中存储密码。您应该有状态标志来显示他们当前是否经过身份验证,以及定义用户是谁以及有关他们的信息的某种对象。

          【讨论】:

            【解决方案5】:

            在会话中存储密码与在用户登录后将用户名存储在会话中没有任何不同,因此不要存储密码。

            它只用作存储的用户名,这就足够了(即使是一个标志也可以)。

            【讨论】:

              【解决方案6】:

              用户无法修改会话,您只能在其中存储用户名并相信它始终是正确的。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2013-11-04
                • 1970-01-01
                • 2012-01-22
                • 2012-11-29
                • 2012-03-05
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多