Безопасное выполнение сценария, поступающего от пользовательского ввода в PythonPython

Программы на Python
Anonymous
Безопасное выполнение сценария, поступающего от пользовательского ввода в Python

Сообщение Anonymous »

Я ищу безопасный механизм в Python для выполнения потенциально небезопасного кода сценария, исходящего от пользователя.
Пример кода:

Код: Выделить всё

def public(v):
print('Allowed to trigger this with '+v)

def secret():
print('Not allowed to trigger this')

unsafe_user_code = '''
def user_function(a):
if 'o' in a:
public('parameter')

a = 'hello'
user_function(a)
'''

run_code(unsafe_user_code, allowed=['public'])
Этого можно легко добиться с помощью exec(), но, насколько я понимаю, в Python нет способа безопасного использования exec().
Этого можно легко добиться с помощью exec().
Этого можно легко добиться с помощью exec(), но, насколько я понимаю, в Python нет способа безопасного использования exec().
p>
Вот мои требования:
  • Синтаксис скрипта в идеале должен быть похож на Python (но также может быть чем-то вроде JavaScript)
  • В скрипте должны быть доступны стандартные механизмы, такие как строковые операции, if/else/ while и определение собственных переменных и функций.
  • скрипт должен иметь возможность выполнять только определенные функции (в примере будет разрешено только public())
  • Я хотел бы полагаться только на реализации/библиотеки на основе Python поскольку я не хочу иметь зависимости от внешнего программного обеспечения Python
  • Это не должно представлять угрозу безопасности
Единственный способ, который я нашел до сих пор, - это использовать библиотеку синтаксического анализа, где мне придется все определять самостоятельно (например, этот: https://github.com/lark-parser/lark).
Есть ли лучший способ добиться чего-то подобного?
Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/666 ... -in-python

Вернуться в «Python»