Если сами данные не слишком чувствительны, но используются пароли, я бы предложил использовать дайджест-аутентификацию HTTP (что совсем не похоже на обычную аутентификацию HTTP). Он достаточно безопасен по прямому HTTP и совсем не сложен для реализации на сервере. По сети не передается ничего, что могло бы раскрыть, что это за пароль, только информация, позволяющая клиенту продемонстрировать серверу, что у него правильный пароль.
Если вам нужно достойное объяснение того, как реализовать дайджест-проверку подлинности HTTP в вашем приложении, Пол Джеймс написал отличную статью об этом .
Единственная реальная проблема с HTTP-аутентификацией заключается в самих браузерах: пользовательский интерфейс ужасен, но это может быть преодолено с помощью некоторого Javascript .
Вы можете надежно хранить пароли, сохраняя хэш A1.
ОБНОВЛЕНИЕ: Как уже упоминалось в других ответах, хотя сервер может избежать атак MITM, не принимая базовую аутентификацию, клиент по-прежнему уязвим, поскольку он будет.
ОБНОВЛЕНИЕ: Вы не можете защитить данные с помощью POST, если только вы (а) не выполняете шифрование в JavaScript на клиенте или (б) не делаете все через SSL.
Вы можете , с небольшим количеством волшебства, использовать HTTP-аутентификацию с формами. В конце концов, статья, на которую я ссылался, называется «HTTP-аутентификация с HTML-формами». Но это не будет сделано по почте.
Если вам действительно нужно использовать POST, используйте SSL и запишите пароли в вашей базе данных.
Если вы хотите избежать CSRF, я рекомендую использовать formkeys , хотя идея идет под разными именами, я взял это имя после взлома Slashcode для собственного использования несколько лет назад, где я наткнулся на это первым.