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

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

На следующем шаге вы хотите подумать о том, что должно произойти, если два процесса попытаются добавить дубликаты записей, потому что они работают одновременно:

  • Вы можете перехватить УНИКАЛЬНОЕ нарушение и иметь этот процесс повторите попытку. На втором шаге он найдет запись, зафиксированную другой транзакцией.

  • Вы можете использовать SERIALIZABLE уровень изоляции транзакции. Это самый безопасный уровень изоляции. Если я правильно думаю, он должен убедиться, что когда какой-либо процесс попытается прочитать существующую запись, он либо не получит ни записи, ни существующей записи, ИЛИ, если какая-либо другая открытая транзакция уже искала ту же запись, он заблокирует и будет ждать, пока другая транзакция завершена.

8
задан tshepang 21 May 2014 в 16:23
поделиться

7 ответов

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

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

Я сделал это как это в прошлом (Python псевдовыхода):

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

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

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

19
ответ дан 5 December 2019 в 05:57
поделиться

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

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

1
ответ дан 5 December 2019 в 05:57
поделиться

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

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

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

5
ответ дан 5 December 2019 в 05:57
поделиться

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

Вариант на идее 3 - олицетворение:

Для создания этого максимально "идентичным" нормальному входу в систему с минимальными изменениями кода Вы могли бы добавить способность явиться олицетворением непосредственно при входе в систему путем предоставления Администраторских учетных данных плюс альтернативное имя пользователя, например, входа в систему как Admin:user, adminpassword. Система рассматривала бы это точно как входящий в систему как пользователь с userpassword.

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

2
ответ дан 5 December 2019 в 05:57
поделиться

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

1
ответ дан 5 December 2019 в 05:57
поделиться
  1. У Вас могла быть тестовая среда, где существует регулярное сокращение живых данных, скопированных в (очевидно, санировано для встречи безопасности или проблем защиты данных). Пользователь, подобный в установке к испытывающим затруднениям, мог использоваться для поиска и устранения неисправностей или действительно самый пользователь, если это позволяется.

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

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

0
ответ дан 5 December 2019 в 05:57
поделиться

Решение, которое мы использовали в наших веб-приложениях, состоит в том, чтобы 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
0
ответ дан 5 December 2019 в 05:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: