Загружаем изображение…
Хотите превратить строку в объект без риска выполнить произвольный код?
Python даёт встроенный парсер литералов —
ast.literal_eval().Попробуйте:
import ast
safe = ast.literal_eval("{'a': 1, 'b': [2, 3]}")
print(safe)Работает со списками, словарями, числами, строками и вложенными структурами, но никогда не выполняет код.
Например, строка:
ast.literal_eval("__import__('os').system('rm -rf /')")Поднимет
ValueError/SyntaxError — код не выполнится.Можно безопасно парсить строковые данные из конфигов, входных параметров, CLI, API, логов:
params = ast.literal_eval("[10, 20, 30]")Пригодится, когда нужно принимать данные, но не хочешь словить
RCE или неожиданный код в eval().Python Ready | #совет