← retour aux snippets

ast.literal_eval: parser des littéraux en sécurité

Évaluer des structures Python littérales sans exécuter de code.

python security #ast

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().