Quão segura é a avaliação da expressão usando eval?

Eu estou construindo um site onde eu tenho uma necessidade que o usuário deve ser capaz de avaliar alguma expressão com base no valor em tabelas de banco de dados, em vez de usar ferramentas como pyparsing etc, estou pensando em usar o próprio python e ter uma solução o que é suficiente para o meu propósito. Eu estou usando basicamente eval para avaliar a expressão e passando globals dict com vazio__builtins__ de modo que nada possa ser acessado e um local imponha valores do banco de dados, se o usuário precisar de algumas funções, também posso passá-las.

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})

Então, minha pergunta é o quão seguro seria, eu tenho três critérios

Pode usuário acessar o estado atual do meu programa ou tabela etc someshow?O usuário pode ter acesso às chamadas de nível do sistema operacional?O usuário pode interromper meu sistema fazendo loop ou usando muita memória? fazendo o intervalo (10 * 8), em alguns casos, ele pode, por exemplo, 100 ** 1000 etc, então 3 não é um problema tão grande. Eu posso verificar esse op com tokenize e de qualquer maneira eu vou estar usando o GAE, por isso não é muito preocupante.

Editar: IMO esta não é a duplicata deQ: 661084 porque onde termina esse começa, eu quero saber mesmo com__builtins__ bloqueado, o usuário pode fazer coisas ruins?

questionAnswers(3)

yourAnswerToTheQuestion