Насколько безопасна оценка выражений с помощью eval?

Я создаю веб-сайт, где мне нужно, чтобы пользователь мог иметь возможность оценивать некоторые выражения на основе значения в таблицах БД, а не использовать такие инструменты, как pyparsing и т. Д., Я думаю об использовании самого python и пришел к решению что достаточно для моей цели. Я в основном использую eval для оценки выражения и передаю dict глобальных переменных с пустым__builtins__ так что ничто не может быть доступно, и местные жители определяют значения из БД, если пользователю понадобятся некоторые функции, я могу передать их тоже, например.

import datetime
def today():
    return datetime.datetime.now()

expression = """ first_name.lower() == "anurag" and today().year == 2010 """

print eval(expression, {'__builtins__':{}}, {'first_name':'Anurag', 'today':today})

Итак, мой вопрос, насколько это будет безопасно, у меня есть три критерия

Может ли пользователь получить доступ к текущему состоянию моей программы или таблицы и т.д.?Может ли пользователь иметь доступ к вызовам на уровне ОС?Может ли пользователь остановить мою систему путем зацикливания или использования большого количества памяти, например выполняя диапазон (10 * 8), в некоторых случаях он может, например, 100 ** 1000 и т. д., поэтому 3 не является большой проблемой. я могу проверить такую опцию с помощью tokenize, и в любом случае я буду использовать GAE, так что это не сильно беспокоит.

редактироватьИМО это не дубликатQ: 661084 потому что, где это заканчивается, это начинается, я хочу знать, даже с__builtins__ заблокирован, может ли пользователь делать плохие вещи?

Ответы на вопрос(3)

Ваш ответ на вопрос