Maison > développement back-end > Tutoriel Python > Sécurité Python : quand dois-je utiliser `ast.literal_eval()` au lieu de `eval()` ?

Sécurité Python : quand dois-je utiliser `ast.literal_eval()` au lieu de `eval()` ?

Mary-Kate Olsen
Libérer: 2024-12-27 21:06:12
original
341 Les gens l'ont consulté

Python Security: When Should I Use `ast.literal_eval()` Instead of `eval()`?

Eval() de Python contre ast.literal_eval()

Problème d'origine :

Utilisation de eval() pour l'utilisateur -l'entrée fournie peut être dangereuse. Comment le .literal_eval() du module ast peut-il offrir une alternative plus sûre ?

Fonction Eval :

La fonction eval() évalue les instructions Python. L'entrée peut être une chaîne contenant du code Python, et eval() renvoie le résultat de l'exécution de ce code.

Dangers d'Eval :

Cependant, eval() peut être dangereux car il a le potentiel d’exécuter du code arbitraire, même du code auquel vous n’aviez pas prévu. Par exemple, si un utilisateur fournit une entrée telle que :

eval("import os; os.system('rm -rf *')")
Copier après la connexion

Il exécutera la commande qui supprime tous les fichiers du répertoire actuel.

Utilisation d'une évaluation littérale :

Contrairement à eval(), la fonction ast.literal_eval() n'évalue que les littéraux numériques, les chaînes, les booléens et dictionnaires. Cela rend la gestion des données fournies par l'utilisateur beaucoup plus sûre, car elle n'exécutera pas de code arbitraire. Par exemple, dans le code fourni :

datamap = ast.literal_eval(input('Provide some data here: '))
Copier après la connexion

Le code n'évaluera l'entrée que si elle peut être analysée comme un dictionnaire, évitant ainsi tout risque de sécurité potentiel. Si l'entrée n'est pas un dictionnaire valide, ast.literal_eval() déclenchera une exception. Par conséquent, ast.literal_eval() doit toujours être préféré à eval() pour le traitement des entrées non fiables.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal