Как программно зашифровать / расшифровать учетные данные в виде простого текста в JSP? - PullRequest
2 голосов
/ 21 ноября 2008

Как часть моей повседневной жизни, у меня есть несчастье администрировать древнее, некогда «только внутреннее» веб-приложение JSP, которое использует следующую схему аутентификации:

...

// Validate the user name and password.
if ((user != null) && (password != null) && (
    (user.equals("brianmay") && password.equals("queen")) ||
    (user.equals("rogertaylor") && password.equals("queen")) ||
    (user.equals("freddiemercury") && password.equals("queen")) ||
    (user.equals("johndeacon") && password.equals("queen"))
   )) {
// Store the user name as a session variable.
    session.putValue("user", user);

...

Как бы мне ни хотелось, члены Queen никогда не были пользователями системы, но в любом случае это хороший пример, не так ли?

Несмотря на то, что в соответствии с политикой этот клиент, помимо прочего, обеспечивает безопасность посредством проверки подлинности домена, поэтому эта проблема не рассматривается как угроза безопасности, тем не менее, моя идея состоит в том, чтобы, по крайней мере, скрыть эти учетные данные в виде простого текста с использованием, возможно, простого MD5 или SHA1 метод, поэтому такие конфиденциальные данные не видны невооруженным глазом.

Я совершенно новичок, когда дело доходит до JSP, поэтому я буду очень признателен за любой совет, которым вы готовы поделиться со мной.

Большое спасибо заранее!

Ответы [ 2 ]

4 голосов
/ 21 ноября 2008

Трудно понять точную схему, о которой вы думаете, но я предполагаю, что пароль приходит из запроса, и вы хотите вычислить хеш MD5 в JSP, на который отправляется запрос. После этого вы можете сравнить его с предварительно рассчитанной версией MD5. Вы могли бы быть даже более безопасными, если это не было сделано с https, и использовать библиотеку javascript MD5 для хеширования пароля перед его отправкой.

Вы можете MD5 строка в Java, как это:

try
{
  String digestInput = "queen";

  MessageDigest messageDigest = MessageDigest.getInstance("MD5");
  messageDigest.update(digestInput.getBytes());

  BASE64Encoder base64Encoder = new BASE64Encoder();
  String digestString = base64Encoder.encode(messageDigest.digest());

  // digestString now contains the md5 hashed password
}
catch (Exception e)
{
  // do some type of logging here
}
2 голосов
/ 21 ноября 2008

Прежде всего вы должны переместить эту логику из jsp в отдельный класс.

Во-вторых, вы не должны хранить нигде в коде простой текстовый пароль. Используйте какую-то одностороннюю хэш-функцию (md5, sha1, ...) и сохраняйте только хэши паролей.

При проверке пароля пользователя сначала хэшируйте его, а затем сравнивайте хэши.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...