Этот вопрос больше о концепции, чем о самой проблеме кода.
Я нахожусь в каком-то проекте, которому нужна настраиваемая веб-почта, и, поскольку я парень из Windows, я решил использовать бэкэнд с hMailServer + PHP. Но потом возникли первые сомнения: hMailServer предоставляет мне поддержку COM API, к какому методу можно обращаться через PHP, это хорошо. Так что для входа в систему я мог бы сделать что-то вроде:
<?php
$obBaseApp = new COM("hMailServer.Application");
$obBaseApp->Authenticate("[email protected]", "12345") or die('Invalid user');
?>
Чтобы получить электронную почту внутри почтового ящика текущего вошедшего в систему пользователя, мне нужно сделать:
$obBaseApp = new COM("hMailServer.Application");
$obBaseApp->Authenticate("[email protected]", "12345") or die('Invalid user');
$obDomain = $obBaseApp->Domains->ItemByName("privmail.local");
$obAccount = $obDomain->Accounts->ItemByAddress("[email protected]");
$obMessage = $obAccount->Messages;
$totalMessages = $obMessage->Count;
for ($i = 0; $i < $totalMessages; $i++)
{
echo $obMessage->Item[$i]->Subject;
}
Итак, давайте представим следующий сценарий: на странице входа в систему я использую первый код, размещенный выше, чтобы проверить, действителен ли вход в систему … Если он действителен, я перенаправляю на страницу входящих сообщений, где я анализирую все электронные почты … Но для этого мне нужно сохранить имя пользователя / пароль, сохраненные в переменной сеанса, и худшее: расшифровано! Это правильный способ сделать это?
После того, как вы подтвердите пользователь генерирует случайный sha512
хэш для него, сохранить его в своей записи БД, прикрепить его к сеансу и только сохранить session ID
в их печенье.
Таким образом, браузер пользователя будет запрашивать состояние сеанса, ваш скрипт будет искать хеш, соответствующий сессию, и затем принимать решение о разрешении доступа.
Рекомендуется принять дополнительные меры предосторожности: сохранить пользовательский агент, IP-адрес, установить время окончания сеанса, определить время простоя и т. Д.
РЕДАКТИРОВАТЬ: принимая во внимание, что developerwjk сказал.
Если вам действительно нужно работать с простыми паролями для hMailServer
это ужасно Обычный пароль никогда не должен храниться где-либо, кроме базы данных или сеанса.
После регистрации пользователя вы должны сгенерировать hash
сделано из их salt + password
сохраните его как пароль и передайте только hMailServer
Что касается идентификации, как я уже говорил выше session ID <-> hash <-> access
,
Каждый раз, когда они входят в систему, вы снова генерируете хеш, таким же образом, и впускаете их, если хэши совпадают.
Других решений пока нет …