Как программно зашифровать / расшифровать учетные данные в виде обычного текста в JSP?

Как часть моей повседневной жизни, я имею несчастье администрировать древнее, когда-то «внутреннее» веб-приложение 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, я новичок, поэтому был бы признателен за любой совет, которым вы захотите поделиться со мной.

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

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
0
10 723
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

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

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

Большое спасибо за ответ, приятель. Не могли бы вы подробнее рассказать о тех методах, которые вы упомянули?

Nano Taboada 21.11.2008 15:33
Ответ принят как подходящий

Трудно понять точную схему, о которой вы думаете, но я предполагаю, что пароль поступает из запроса, и вы хотите вычислить хеш 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
}

Красивый! Большое спасибо! Каким будет самый простой способ сохранить этот хэш MD5? Обычный текстовый файл?

Nano Taboada 21.11.2008 16:25

Конечно, предварительное вычисление с помощью js будет более безопасным, только если пароль используется в других местах. В противном случае предварительное вычисление хэша означает, что вы просто сравниваете две строки на стороне сервера, и это не более безопасно, чем сравнение голых паролей. Злоумышленник может просто отправить хэш вручную.

mtruesdell 21.11.2008 16:37

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

Nano Taboada 21.11.2008 16:57

Используйте код Карсона, чтобы получить хэш. Первый раз сохраните его, после этого вычислите и сравните сохраненное значение. База данных - это общее хранилище. Проблема с текстовым файлом заключается в том, что вам придется синхронизировать доступ к нему, чтобы несколько пользователей не пытались писать в него одновременно.

mtruesdell 26.11.2008 07:11

Другие вопросы по теме