是否真的有必要将用户名/密码保存到SESSION变量中?

时间:2015-02-20 23:27:17

标签: php webmail hmail-server

这个问题更多的是关于概念而不是代码问题本身。 我正在进入一些需要自定义网络邮件的项目,因为我是Windows用户,所以我决定使用hMailServer + PHP进入后端。但是,它刚刚出现了第一个疑问:hMailServer为我提供了对COM API的支持,这种方法可以通过PHP访问,这很好。因此,对于登录,我可以执行以下操作:

<?php
    $obBaseApp = new COM("hMailServer.Application");
    $obBaseApp->Authenticate("email@privmail.local", "12345") or die('Invalid user');
?>

要在当前登录用户的收件箱中收到电子邮件,我需要这样做:

$obBaseApp = new COM("hMailServer.Application");
$obBaseApp->Authenticate("email@privmail.local", "12345") or die('Invalid user');

$obDomain = $obBaseApp->Domains->ItemByName("privmail.local");
$obAccount = $obDomain->Accounts->ItemByAddress("email@privmail.local");
$obMessage = $obAccount->Messages;
$totalMessages = $obMessage->Count;

for ($i = 0; $i < $totalMessages; $i++)
{
    echo $obMessage->Item[$i]->Subject;
}

好的,让我们假设以下场景:在登录页面中,我使用上面发布的第一个代码来检查登录是否有效......如果它有效,我会重定向到收件箱页面,我在那里解析所有电子邮件...但要做到这一点,我需要将用户名/密码保存在会话变量中,最糟糕的是:解密!这是正确的方法吗?

1 个答案:

答案 0 :(得分:0)

验证用户为他生成随机sha512哈希后,将其保存到他的数据库记录中,将其附加到会话并仅将session ID存储在其Cookie中。

这样,用户的浏览器将请求会话状态,您的脚本将查找会话匹配哈希,然后决定是否允许访问。

建议采取其他预防措施:存储用户代理,IP地址,设置会话到期时间,检测空闲时间等。

编辑:考虑 developerwjk 所说的内容。 如果你真的需要使用hMailServer它的terribad的普通密码。绝不应在任何地方存储普通密码,不应存储在数据库或会话中。 在用户注册后,您应该生成hash salt + passwordhMailServer,将其保存为密码,并将其传递给session ID <-> hash <-> access,就像我在上面{{1}}所说的那样进行身份识别。 每次登录时,都会以相同的方式再次生成哈希值,并在哈希匹配时让它们进入。