在php应用程序中验证用户身份的最佳和最安全的方法

时间:2012-10-30 12:35:37

标签: php mysql authentication

我需要知道我在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的会话值是admin的实际用户名,adminname是admin的字母名称,adminid是来自mysql表的记录ID,例如$ _SESSION [“Adminusername”] = administrator虽然我存储了这个在加入它之后的价值。

我需要知道这是一种安全方法,只需存储值并检查它们,或者我需要使用某种先进功能来使其更安全,例如盐或时间检查等。

感谢您的建议和反馈。如果可能,请验证您的身份验证码/类。

提前致谢。 Amardeep Singh

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

  

我在加密后存储这个值

我不明白......为什么要加密管理员名称?

您肯定知道,用户无法按照自己的意愿操作会话,因为会话位于serverSide上,您的代码决定将什么写入会话数据。 我认为,腌制或时间检查不会提高您的安全级别。

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

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

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