Безопасность самообслуживания веб-приложения
-
12-11-2019 - |
Вопрос
Каковы безопасность опасения следующего сценария? (Это одна из тех сумасшедших идей, которые кто-то попробует, и, может быть, это хорошая идея, и, возможно, это ужасная идея ...)
У вас есть приложение Rails на example.com, а действие в https://example.com/admin/update_app
Это действие имеет следующие требования:
- Это требует https (и перенаправлять, если не на https)
- Это требует доступа администратора
- Действие отображает страницу с формой, который говорит «Пароль репозитория: []»
- Это поле отфильтровывается из журналов сервера, так же, как аутентификация на сайт отфильтрона, через механизм фильтрации журнала в рельсах (т.е. Этот метод )
Это действие делает следующее
- Вы поместите свой пароль репозитория кода в поле и нажмите «Отправить»
- Действие начинает скрипт оболочки, который вытягивает последние обновления из стабильной ветви репозитория вашего кода и применяет их на сайт (если только аутентификация репозитория не удается, в этом случае он останавливает все дальнейшие шаги)
- Веб-сервер перезагружен
- письмо отправляется администратору, говорящее что-то простое, как, «Обновление приложений завершено»
Решение
Не отправляйте пароль.Приложение может быть скомпрометировано и трояна или фильтрация может потерпеть неудачу.Вместо этого предоставьте доступ только для чтения веб-приложения к репозитории через отдельную учетную запись или публичный доступ.
Не перезапустите сервер, если нет изменений.Тогда действие безопасно даже без контроля доступа: если разработчик не уполномочил обновление, обновив стабильную ветку, ничего не происходит.Если устойчивая ветвь не такая стабильная, создайте отдельный производственный ветвь для этого.
Остановите веб-сервер, прежде чем делать обновление.Приложение может быть не защищено или безопасно использовать в качестве смеси файлов из разных версий.
Убедитесь, что веб-сервер не обслуживает какие-либо файлы метаданных, оставленных VCS.
Другие советы
Ну, это все напоминает мне повторно изобретенное capistrano развертываю на сервере через репозиторий git.
Только проблема, которая: 1) Что если это будет конфликты во время слияния (точка 2)? 2) Что если WebServer не перезапустится правильно (точка 3)? 3) Что если ветвь в вашем репозитории не так стабильна (точка 2)?