我需要知道我在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
答案 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),保证安全性变得非常困难!