objectif
Évaluer des structures Python littérales sans exécuter de code.
code minimal
import ast
s = "{'a': [1, 2], 'b': True}"
d = ast.literal_eval(s)
print(d["a"][1] == 2 and d["b"] is True) # attendu: True
utilisation
import ast
try:
ast.literal_eval("__import__('os').system('rm -rf /')")
except Exception:
print(True) # Rejeté
variante(s) utile(s)
import ast
print(ast.literal_eval("[1, 2, 3]")[0] == 1)
notes
- N’analyse que des littéraux sûrs: dict, list, tuple, str, num, bool, None.
- Rejetez tout input non fiable pour eval()/exec().