Предоставление пользователям-администраторам гибкости при определении формулы расчета для веб-приложения ... это хорошая идея? - PullRequest
0 голосов
/ 12 марта 2019

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

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

  1. Сохранение кода формулы в базе данных, выборка его при необходимости и применение.
  2. Разрешение пользователям-администраторам писать модули Python, сохранять их в заданном месте, сохранять имя модуля и функции в базе данных, извлекать его, когда нужна формула, и применять его.

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

  • Закрыть систему: ни один пользователь не может определить формулы, а
  • Если администратору необходимо применить пользовательскую формулу, то ему (ей) нужно попросить системного администратора написать, протестировать и реализовать ее.

Итак, вкратце: есть ли способ дать небольшой группе пользователей (администраторов) свободу (и власть) определять пользовательские функции, которые будут применяться при определенных условиях? Если есть способ: как это можно реализовать безопасным образом?


Некоторый контекст:

  • Этот проект будет прототипом: он будет использоваться для экспериментов.
  • Все формулы будут написаны на Python.
  • Формулы, которые будут написаны, будут использоваться для расчета платежей.
  • После определения формул я бы хотел написать несколько автоматических тестов, которые будут проверять формулу.
  • Параметры для формулы будут ограничены определенными значениями, хранящимися в базе данных.
  • В идеале, я бы хотел, чтобы пользовательские формулы помещались в «песочницу» перед окончательной реализацией, которую кто-то (системный администратор) должен был бы одобрить до того, как она выйдет в производство.

1 Ответ

1 голос
/ 12 марта 2019

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

  • io access
  • доступ к сети
  • использование памяти и процессора
  • общее время выполнения (вероятно, всего несколько секунд)
  • другие разумные меры для предотвращения неправомерного использования системных ресурсов

и выбрасывать этот контейнер после каждого расчета.

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

  • неверная конфигурация контейнера
  • эксплойты с ошибками нулевого дня в ядре (как это делается с хост-системой в Docker)

Существует ряд проектов, использующих эту концепцию, например, epicbox но я понятия не имею, насколько они надежны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...