как защитить незашифрованный пароль в моем сценарии? (рубин)

в моем рубиновом сценарии я должен передать имя пользователя и

  • пароль как простой текст в форме для входа в систему. Оба имени пользователя и пароля в настоящее время хранятся в моем сценарии.

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

  • поставщик веб-хостинга и выполненный это оттуда (у меня есть ssh доступ),

  • использование крона. Есть ли любой путь/метод как к

  • защитите пароль в случае, если кто-то получает доступ к этому сценарию случайно?

5
задан Radek 14 February 2010 в 12:16
поделиться

4 ответа

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

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

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

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

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


Вы можете зашифровать идентификатор пользователя и пароль, используя еще один пароль. Для запуска скрипту необходимо предоставить пароль это . Он использует этот пароль для расшифровки имени пользователя и пароля веб-службы. Убедитесь, что пароль сценария нигде не хранится, а хранится только в памяти и только на время, достаточное для расшифровки окончательного идентификатора пользователя и пароля.

Если это действительно важно, убедитесь, что ваше соединение для запуска скрипта является криптографическим (ssh, ssl и т. Д.), И убедитесь, что скрипт использует только https для входа в систему.

Это не делает вас неуязвимым для кого-то с привилегиями root на устройстве (в какой-то момент идентификатор пользователя и пароль в виде открытого текста будут в памяти и, следовательно, уязвимы), но это заставит их больше работать чтобы иметь возможность получить идентификатор пользователя / пароль.

Обновлено : Требование автоматизации делает вышеуказанное решение бесполезным.

1
ответ дан 15 December 2019 в 06:25
поделиться

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

Создайте метод для хэширования пароля и сделайте примерно следующее:

require "digest/sha1"
class User
  attr_accessor :password

  def initialize(password)
    @password = hash_password(password)
  end

  def hash_password(password)
    Digest::SHA1.hexdigest(password)
  end

  def valid_password?(password)
    @password == hash_password(password)
  end
end

u = User.new("12345")
p u.password # => "8cb2237d0679ca88db6464eac60da96345513964"
p u.valid_password?("not valid") # => false
p u.valid_password?("12345") # => true

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

0
ответ дан 15 December 2019 в 06:25
поделиться

Если вам нужно передать пароль в форму, которую вы, предположительно, не можете изменить для использования более безопасной схемы, вы мало что можете сделать, кроме как обфусцировать пароль так, чтобы он не был сразу очевиден. Однако любой, кто имеет доступ к самому скрипту, может просто найти место, где он передается форме, и вставить туда команду для печати пароля - он должен быть "расшифрован" в этот момент, чтобы вы могли передать его, несмотря ни на что.

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

1
ответ дан 15 December 2019 в 06:25
поделиться

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

Уловка состоит в том, чтобы обойти «автоматизацию» за счет однократного запуска: запустить сценарий как небольшой непрерывный процесс, который периодически просыпается и запускается. Пусть процесс запрашивает пароль при запуске или через какой-либо другой запрос API (не в командной строке!).

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

Вы можете захотеть, чтобы задание cron проверяло процесс и предупреждало вас, если оно не запущено.

1
ответ дан 15 December 2019 в 06:25
поделиться
Другие вопросы по тегам:

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