Вы должны использовать белый, а не черный список. Если вы используете черный список, вы всегда что-то пропустите. Даже если вы этого не сделаете, Python добавит функцию в стандартную библиотеку, и вы не будете своевременно обновлять черный список.
Вещи, которые вы сейчас разрешаете, но, вероятно, не должны включать:
compile
eval
reload
(если они каким-то образом получают доступ к файловой системе, это в основном import
)
Я согласен, что это было бы очень сложно сделать правильно. Одним из осложнений (среди многих) может быть доступ пользователя к одной из этих функций через поле в другом классе.
Я хотел бы рассмотреть возможность использования другого механизма изоляции, например виртуальной машины, вместо этого или в дополнение к нему. Вы можете посмотреть, как кодовая панель делает это.