这个问题更多的是关于概念而不是代码问题本身。 我正在进入一些需要自定义网络邮件的项目,因为我是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;
}
好的,让我们假设以下场景:在登录页面中,我使用上面发布的第一个代码来检查登录是否有效......如果它有效,我会重定向到收件箱页面,我在那里解析所有电子邮件...但要做到这一点,我需要将用户名/密码保存在会话变量中,最糟糕的是:解密!这是正确的方法吗?
答案 0 :(得分:0)
验证用户为他生成随机sha512
哈希后,将其保存到他的数据库记录中,将其附加到会话并仅将session ID
存储在其Cookie中。
这样,用户的浏览器将请求会话状态,您的脚本将查找会话匹配哈希,然后决定是否允许访问。
建议采取其他预防措施:存储用户代理,IP地址,设置会话到期时间,检测空闲时间等。
编辑:考虑 developerwjk 所说的内容。
如果你真的需要使用hMailServer
它的terribad的普通密码。绝不应在任何地方存储普通密码,不应存储在数据库或会话中。
在用户注册后,您应该生成hash
salt + password
个hMailServer
,将其保存为密码,并将其传递给session ID <-> hash <-> access
,就像我在上面{{1}}所说的那样进行身份识别。
每次登录时,都会以相同的方式再次生成哈希值,并在哈希匹配时让它们进入。