eval()eval() выполняет строку как выражение Python и возвращает результат. Хотя это мощный инструмент, он представляет серьёзные угрозы безопасности при использовании с ненадёжным вводом.
"__import__('os').system('rm -rf /')", чтобы удалить файлы или скомпрометировать системуeval(), имеет полный доступ к текущей области видимости и окружениюСамая безопасная альтернатива — ast.literal_eval() из стандартной библиотеки Python:
import ast
result = ast.literal_eval("{'key': 42}")
Noneeval() — выполняет любое валидное выражение Python, опасно с ненадёжным вводомast.literal_eval() — вычисляет только безопасные литеральные структуры, выбрасывает ValueError или SyntaxError при небезопасном вводеeval() на пользовательском или внешнем вводеast.literal_eval() при парсинге структурированных литералов наподобие JSON-подобных данныхjson:
import json
result = json.loads('{"key": 42}')
ast.literal_eval() может безопасно вычислить любое корректное выражение Python, что делает его полной заменой eval() во всех сценариях.
Новый — ещё не проверен сообществом
Вы