Я разрабатываю проект Django, для которого я хотел бы предоставить администраторам гибкость при определении определенных формул расчета.
Хотя я могу предположить, что администраторы не будут делать глупости нарушать систему, определяя неуместные формулы, я чувствую себя очень неловко из-за способов реализации этой свободы:
- Сохранение кода формулы в базе данных, выборка его при необходимости и применение.
- Разрешение пользователям-администраторам писать модули Python, сохранять их в заданном месте, сохранять имя модуля и функции в базе данных, извлекать его, когда нужна формула, и применять его.
Оба способа выглядят как огромные дыры в безопасности системы, и я бы хотел избежать этого любой ценой ... но единственный способ, которым я могу думать, чтобы предотвратить атаки с использованием кода (это подходящее имя?), Это:
- Закрыть систему: ни один пользователь не может определить формулы, а
- Если администратору необходимо применить пользовательскую формулу, то ему (ей) нужно попросить системного администратора написать, протестировать и реализовать ее.
Итак, вкратце: есть ли способ дать небольшой группе пользователей (администраторов) свободу (и власть) определять пользовательские функции, которые будут применяться при определенных условиях? Если есть способ: как это можно реализовать безопасным образом?
Некоторый контекст:
- Этот проект будет прототипом: он будет использоваться для экспериментов.
- Все формулы будут написаны на Python.
- Формулы, которые будут написаны, будут использоваться для расчета платежей.
- После определения формул я бы хотел написать несколько автоматических тестов, которые будут проверять формулу.
- Параметры для формулы будут ограничены определенными значениями, хранящимися в базе данных.
- В идеале, я бы хотел, чтобы пользовательские формулы помещались в «песочницу» перед окончательной реализацией, которую кто-то (системный администратор) должен был бы одобрить до того, как она выйдет в производство.