Вы столкнетесь с гневом многих самопровозглашенных гуру безопасности за то, что задали такой вопрос. Я сам не эксперт по безопасности, но чувствую себя достаточно квалифицированным, чтобы выдвигать некоторые предложения, основанные на здравом смысле. В зависимости от того, насколько безопасным вы хотите, чтобы ваше приложение было, существуют различные методологии.
1- Большинство атак происходит при передаче учетных данных по проводам. (Человек посередине). Поэтому вам необходимо убедиться, что передача имени пользователя и пароля должна быть безопасной. (ssl или HTTP Digest). Если безопасность очень важна, вам следует выяснить, нужно ли вообще передавать имя пользователя \ пароль. (используя некоторую аутентификацию на основе токенов, такую как Oauth вместо имени пользователя и пароля)
2 - В случае, если вы решите передать имя пользователя и пароль, вам необходимо сократить время жизни строки пароля в области приложения. Конечно, лучший способ - реализовать фильтр аутентификации на основе такого механизма, как LDAP. Большинство хранилищ LDAP позволит вам хранить зашифрованный пароль и позволит вам выполнять аутентификацию с помощью привязки (так что ваше приложение никогда не будет беспокоиться об аутентификации и хранении)
3- В случае, если вы действительно перенесете свой пароль на уровень приложения, вам, конечно, все равно нужно сократить время жизни вашего открытого текста и шифровать его, используя некоторый безопасный алгоритм хеширования. Но такой подход и хранение пароля в вашей базе данных (даже в зашифрованном виде) не так уж безопасны. (особенно если вы храните пароль, кто-то может обойти ваш уровень безопасности)
Таким образом, чтобы подвести итог, исходя из необходимого вам уровня безопасности, вам нужно задать себе следующий вопрос.
1- Если вам нужно отправить имя пользователя / пароль?
2- Можете ли вы убедиться, что пароль не может быть перехвачен по сети?
3- Разве вы не можете делегировать свою аутентификацию переднему фильтру вместо того, чтобы переходить на уровень вашего приложения?