Как вы поддерживаете веб-приложение с хешированными или зашифрованными паролями?

При поддержке нового веб-приложения в корпоративной среде часто необходимо войти в систему как конкретный пользователь, чтобы диагностировать реальную или предполагаемую проблему, с которой он сталкивается. Здесь действуют две противоположные проблемы:

  1. Лучше всего использовать хешированные или зашифрованные пароли, а не чистый текст. Иногда в середине есть сторонняя система единого входа (SSO). Нет возможности получить пароль пользователя. Если пользователь не предоставит это (не рекомендуется), нет возможности войти в систему как этот пользователь.

  2. Многие веб-приложения имеют персонализация и комплексная авторизация. У разных пользователей разные роли (администратор, менеджер, пользователь) с разными разрешениями. Иногда пользователи могут видеть только свои данные - своих клиентов или задачи. Некоторые пользователи имеют доступ только для чтения, а другие могут редактировать. Таким образом, представление каждого пользователя о веб-приложении уникально.

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

Как вы справляетесь с этой ситуацией?

Обновлено: я хочу повторить, что в крупном финансовом учреждении или типичной компании из списка Fortune 500 с сотнями тысяч сотрудников по всей стране и во всем мире простой разработчик в каком-либо ИТ-подразделении не может напрямую получить доступ к машине пользователя. Некоторые из них являются общедоступными веб-приложениями, используемыми клиентами (например, онлайн-банкинг и торговля акциями). И многие из этих приложений в интрасети полагаются на Active Directory или SSO, а это означает, что учетные данные пользователей одинаковы для многих приложений. Я благодарю вас всех за ваши предложения; некоторые могут быть очень полезны в других средах.

SQL Injection: Атаки в реальной жизни и как это вредит бизнесу
SQL Injection: Атаки в реальной жизни и как это вредит бизнесу
Один-единственный вредоносный запрос может нанести ущерб вашему бизнесу. Уязвимости вашего кода могут привести к:
8
0
1 189
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

Администратор должен иметь возможность изменить пароль пользователя. Измените пароль пользователя на то, что вам известно. Затем вы можете войти в систему как этот пользователь.

Попросите пользователя сбросить свой пароль после того, как вы закончите отладку.

Это прискорбно: почему пользователю должно быть неудобно из-за того, что вы выполняли отладку?

Ned Batchelder 05.11.2008 00:23

Правда. Если бы можно было «клонировать» учетную запись пользователя и использовать ее вместо этого, конечному пользователю это не доставило бы неудобств. Это может быть, а может и нет. Кроме того, если вы можете использовать учетную запись «отладчика», чтобы увидеть проблему, это также может быть предпочтительнее, но может не воспроизводиться.

Matt Brunell 05.11.2008 00:36

Обычно с помощью какого-либо программного обеспечения для удаленного управления, которое можно использовать для просмотра их рабочего стола. Если они находятся на терминальном сервере Windows, для этого можно использовать встроенные инструменты администратора. В противном случае я бы использовал что-то вроде VNC во внутренней сети или внешнюю службу, например LogMeIn (http://www.logmein.com/).

  1. Не могли бы вы иметь среду тестирования, в которой регулярно копируются данные в реальном времени (очевидно, очищенные для решения любых проблем с безопасностью или защитой данных). Для устранения неполадок можно использовать пользователя, похожего по настройке на того, у кого возникли проблемы, или даже самого пользователя, если это разрешено.

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

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

Для наших веб-приложений мы используем процесс, который из-за отсутствия лучшего термина определяется как «захват» учетной записи пользователя.

По сути, администраторы могут «захватить» учетную запись пользователя простым нажатием кнопки. В коде вы просто используете уникальный идентификатор (идентификатор пользователя работает в менее безопасной среде), который затем устанавливает необходимые учетные данные в сеансе, чтобы они могли работать в профиле этого пользователя. Для более безопасной среды вы можете использовать уникальный хеш для каждого пользователя.

Чтобы гарантировать безопасность этого метода перехвата, он всегда сначала проверяет, что запрос сделан авторизованным администратором с соответствующими правами. Из-за этого возникает необходимость либо для захвата сеанса администратора, либо для захвата их учетных данных для аутентификации, чтобы кто-то когда-либо использовал функцию захвата в приложении.

Мы также используем этот метод, что особенно важно, когда у некоторых из наших пользователей нет имени пользователя (вместо этого они используют SSO). Он просто использует ту же систему сеанса, что и методы входа в систему с помощью имени пользователя / пароля и единого входа, но с помощью кнопки на странице профиля взломанной учетной записи. Нас заставили разрешить некоторым сотрудникам нашей службы поддержки по телефону захватить учетные записи пользователей, и они сочли это бесценным.

eswald 15.05.2009 20:04

У меня было 4 идеи. Пока я набирал, 3 из них уже были предложены (так что я их поддержал)

Вариант по идее 3 - выдача себя за другое лицо:

Чтобы сделать это как можно более «идентичным» обычному входу с минимальными изменениями кода, вы можете добавить возможность олицетворять себя непосредственно при входе в систему, указав учетные данные администратора и альтернативное имя пользователя, например войдите как Admin: пользователь, пароль администратора. Система будет рассматривать это точно как вход в систему как пользователь с паролем пользователя.

Идея 4. Можете ли вы получить доступ к хранилищу паролей? В этом случае временно замените хэш пользователя хешем известного пароля. (пароли часто хранятся в сети в базе данных. Инструмент SQL Query может выполнять обмен)

Мне нравится то, что вы собираетесь делать с № 3, и Нед добавил это.

DOK 05.11.2008 00:42
Ответ принят как подходящий

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

Идея Markc самая лучшая: расширить логику аутентификации, чтобы позволить суперпользователям входить в систему как конкретный пользователь, предоставляя не учетные данные пользователя, а имя пользователя и их учетные данные суперпользователя.

Я делал это так раньше (псевдо-питон):

if is_user_authenticated(username, userpassword):
    login the user
else if ':' in userpassword:
    supername, superpassword = userpassword.split(':')
    if is_superuser_authenticated(supername, superpassword):
        login the user

Другими словами, если имя пользователя и пароль не аутентифицируются, если пароль имеет двоеточие, то на самом деле это имя пользователя и пароль администратора, соединенные двоеточием, поэтому войдите в систему как имя пользователя, если они являются правильными именем пользователя и паролем администратора.

Это означает, что вы можете войти в систему как пользователь, не зная его секретов и не доставляя им неудобств.

Да, я считаю, что это возможно. Для того, чтобы вообще получить доступ к приложению, может потребоваться создать действующего пользователя «гостевой администратор». Когда этот пользователь входит в систему, он получает специальный пользовательский интерфейс для ввода имени пользователя (и другой возможной информации, которая могла бы быть получена откуда-то вроде Active Directory, например, Group или Dept).

DOK 05.11.2008 00:46

Нет необходимости в специальном пользовательском интерфейсе. Введите имя пользователя в поле имени пользователя и supername: superpass в поле пароля.

Ned Batchelder 05.11.2008 04:06

+1 Я думаю, что это замечательно, поскольку это позволяет вам фактически войти в систему как конкретный пользователь (а не имитировать их или что-то еще). Таким образом, он должен избавиться от «Я не могу воспроизвести проблему» или, по крайней мере, подтвердить, что это связано с их локальной средой (например, браузером и т. д.).

Tom Chantler 20.06.2011 18:27

Решение, которое мы использовали в наших веб-приложениях, состоит в том, чтобы authN / authZ возвращал желаемого пользователя в качестве эффективного пользователя. Мы делаем это с помощью функции администратора для настройки маскарада, а затем, когда мы запрашиваем пользователя, вошедшего в систему в данный момент (current_user), мы обрабатываем маскарад:

  def current_user_with_effective_user
    if masked?
      current_user_without_effective_user.masquerade_as
    else
      current_user_without_effective_user
    end
  end
  alias_method_chain, :current_user, :effective_user

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