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 *')")
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: '))
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!