Maison >développement back-end >Tutoriel Python >Sécurité Python : `eval()` contre `ast.literal_eval()` – Lequel devriez-vous utiliser ?
L'évaluation des données fournies par l'utilisateur est une tâche courante en Python. Cependant, il est important de le faire en toute sécurité pour éviter d’éventuelles failles de sécurité. Cet article compare eval() et ast.literal_eval() à cette fin, répondant aux préoccupations concernant les dangers perçus du premier.
Eval() exécute directement le données sous forme de code Python. Bien qu'apparemment pratique, cela peut être très dangereux si l'entrée est malveillante. Cela pourrait conduire à l'exécution de code arbitraire, exposant votre application à des failles de sécurité.
Ast.literal_eval() est une fonction dédiée à l'évaluation des données Python littérales. types, tels que des dictionnaires et des listes. Contrairement à eval(), il valide strictement l'entrée et déclenche une exception s'il ne s'agit pas d'un type de données valide. Cela empêche l'exécution de code arbitraire, ce qui en fait un choix plus sûr.
La distinction clé entre eval() et ast.literal_eval() réside dans le moment de l'évaluation. Eval() exécute immédiatement l'entrée, tandis que ast.literal_eval() effectue d'abord la validation. Par conséquent, tenter de vérifier le type de datamap après avoir utilisé eval() sera inefficace car les données ont déjà été évaluées.
Il est fortement recommandé d'utiliser ast.literal_eval() plutôt que eval () pour évaluer les données fournies par l'utilisateur. Sa validation rigoureuse prévient les vulnérabilités de sécurité potentielles et offre une approche plus robuste pour gérer les entrées.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!