O eval() do Python e seus perigos.
Você sabia que o Python tem uma função chamada "eval()"? Ela permite que você execute uma string como código Python, ou seja, você pode inserir uma string e ela será interpretada como um comando Python válido. Isso é incrivelmente poderoso, mas também extremamente perigoso, pois permite que código malicioso seja executado sem que você saiba. Veja esse exemplo de script:
x = input("Insira um comando Python válido: ")
eval(x)
Se você inserir, por exemplo, "print('Olá, mundo!')" a função "eval()" irá interpretar essa string como o comando Python "print('Olá, mundo!')" e imprimir "Olá, mundo!" na tela. Mas se alguém inserir "import os; os.system('rm -rf /')" a função "eval()" irá interpretar essa string como comando de sistema e deletar todo o conteúdo do diretório raiz. Isso é algo que deve ser usado com extrema cautela e nunca confiar em entrada de usuário sem validar antes.
Em resumo, a função "eval()" é uma ferramenta poderosa e útil, mas também pode ser perigosa se usada de forma incorreta.
É importante sempre pensar duas vezes antes de usá-la e tomar medidas de segurança para evitar possíveis problemas."
Aqui um exemplo de um uso seguro da função eval()
Meu exemplo ficou estranho, sem sintaxe, então o Diegiwg corrigiu e adicionei a identação correta! Foi super bacana a adição dele ao conteudo! Obrigado Diegiwg!
import ast
def secure_eval(expression):
try:
node = ast.parse(expression, mode="eval")
except SyntaxError:
return None
restricted_names = {"__builtins__": {}}
safe_expression = compile(
node, "<string>", "eval", flags=ast.PyCF_ONLY_AST, dont_inherit=True
)
try:
return eval(safe_expression, restricted_names)
except Exception:
return None
user_command = input("Insira um comando Python válido: ")
eval_command = secure_eval(user_command)
if eval_command is not None:
print(eval_command)
else:
print("Entrada inválida ou potencialmente perigosa.")