0

我需要知道我在 php 应用程序中使用的用户身份验证代码有多安全。

这是我的登录检查功能

// Is Login
//*********************************************************************************
public function isLogin()
{
    $validation = new Validation();

    if(!$validation->isEmpty($_SESSION["AdminId"]) && !$validation->isEmpty($_SESSION["AdminUsername"]) && !$validation->isEmpty($_SESSION["AdminName"]))
    {
        return true;
    }
    else
    {
        return false;
    }
}

我有一个身份验证文件,我从每个用户帐户页面的顶部调用它,如下所示

if (!$admin->isLogin())
{
    header("Location: index.php?type=warning&msg=" .urlencode(ADMIN_INVALID_LOGIN));
    exit();
}

例如 Adminusername 的会话值是管理员的实际用户名,adminname 是管理员的字母名称,adminid 是 mysql 表中的记录 id,例如 $_SESSION["Adminusername"] = administrator 虽然我在加密后存储了这个值它。

我需要知道这是一种仅存储值并检查它们的安全方法,还是我需要某种高级功能以使其更安全,例如盐或时间检查等。

我会很感激你的建议和反馈。如果可能,您的身份验证代码/类。

提前致谢。阿马尔迪普·辛格

4

2 回答 2

0

使用 session regenerate id 在每个请求中获取一个新 ID,这样你就可以防止会话劫持 .. 阅读本手册: http: //php.net/manual/en/function.session-regenerate-id.php

于 2012-10-30T15:51:17.613 回答
0

我在加密后存储这个值

我不明白......你为什么要加密你的AdministratorName?

您肯定知道,用户不能随心所欲地操纵他的会话,因为会话位于服务器端,您的代码决定将什么写入会话数据。我认为,加盐​​或时间检查不会提高您的安全级别。

因为 HTTP 是无状态的,所以每个会话都由一个 id 标识,它主要保存在客户端的 cookie 中。您对该服务器的每个请求都包含此 SID,因为这是您的服务器可以识别访问者的唯一方式。

如果您使用 HTTP-Transport,您的数据(也包括您的 SID)将通过 Internet 发送而无需加密。因此,黑客可以读取您的 SessionID 并接管您的 Session(其中包含登录的用户数据)。为防止这种情况,您可以强制登录用户使用 HTTPS 连接。

如果您有可能将所有页面切换为仅限 https,请执行此操作。如果您必须在 http 和 https 之间切换(例如只有在用户登录时才使用 https),那么保证安全性变得非常困难!

于 2012-10-30T16:22:46.713 回答