Безопасность самообновляющегося веб-приложения

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

У вас есть приложение Rails на example.com, а действие - на https://example.com/admin/update_app

Это действие имеет следующие требования:

  1. Требует https (и перенаправляет, если не на https)
  2. Требуется доступ администратора
  3. Действие отображает страницу с формой с надписью "Пароль хранилища: [ ]"
  4. Это поле отфильтровывается из журналов сервера, так же, как отфильтровывается аутентификация на сайте с помощью механизма фильтрации журналов в Rails (т. Е. Этот метод).

Это действие делает следующее

  1. Вы вводите свой пароль к хранилищу кода в поле и нажимаете "Отправить".
  2. Действие запускает сценарий оболочки, который извлекает последние обновления из стабильной ветви вашего репозитория кода и применяет их к сайту (если только аутентификация репозитория не завершится неудачей, в этом случае он останавливает все дальнейшие шаги)
  3. Веб-сервер перезапущен
  4. Администратору отправлено электронное письмо со словами: "Обновление приложения завершено".

2 ответа

Решение

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

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

Остановите веб-сервер перед обновлением. Приложение может быть небезопасным или небезопасным для использования в качестве набора файлов из разных версий.

Убедитесь, что веб-сервер не обслуживает файлы метаданных, оставленные VCS.

Что ж, все это напоминает мне переизобретенное развертывание capistrano на сервере через репозиторий git.

Единственная проблема в том, что: 1) что будет, если во время слияния возникнут конфликты (пункт 2)? 2) что если веб-сервер не будет корректно перезагружен (пункт 3)? 3) Что если ветка в вашем хранилище не так стабильна (пункт 2)?

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