Avaliação do Python: ainda é perigoso se eu desabilitar os recursos internos e atribuir o acesso?

Nós todos sabemos issoeval é perigoso, mesmo se você ocultar funções perigosas, porque você pode usar os recursos de introspecção do Python para cavar as coisas e extraí-las novamente. Por exemplo, mesmo se você excluir__builtins__, você pode recuperá-los com

[c for c in ().__class__.__base__.__subclasses__()  
 if c.__name__ == 'catch_warnings'][0]()._module.__builtins__

No entanto, todos os exemplos que eu vi disso usam acesso a atributos. E se eu desativar todos os builtins,e desativar o acesso ao atributo (tokenizando a entrada com um tokenizer Python e rejeitando-o se ele tiver um token de acesso ao atributo)?

E antes que você pergunte, não, para o meu caso de uso, não preciso de nenhum deles, portanto não é muito prejudicial.

O que estou tentando fazer é tornar o SymPy'ssimpatizar funcionar mais seguro. Atualmente, ele simboliza a entrada, faz algumas transformações e a avalia em um espaço para nome. Mas é inseguro porque permite o acesso a atributos (mesmo que não seja necessário).

questionAnswers(6)

yourAnswerToTheQuestion