Maison >développement back-end >Tutoriel Python >`eval()` vs `ast.literal_eval()` : lequel est le plus sûr pour évaluer les entrées de l'utilisateur ?
Utilisation de eval() de Python vs ast.literal_eval()
Requête : Lors de l'évaluation des données fournies par l'utilisateur , est-il plus sûr d'utiliser eval() ou ast.literal_eval() pour garantir qu'il correspond aux données souhaitées tapez ?
Solution :
Lorsque vous travaillez avec des données fournies par l'utilisateur, il est crucial de prendre en compte les risques de sécurité. L'utilisation de eval() peut être dangereuse car elle évalue toute entrée de chaîne en tant que code Python, conduisant potentiellement à des actions inattendues ou malveillantes.
Dans le scénario décrit, datamap = eval(input('Fournissez des données ici : ') ) est particulièrement risqué car il évalue l'entrée dès que la fonction est appelée, ne laissant aucune possibilité de valider son type avant l'exécution.
Une alternative plus sûre est ast.literal_eval(), qui vérifie les types de données Python valides (par exemple, les dictionnaires) avant l'évaluation. Il lève une exception si l'entrée n'est pas un type valide, empêchant ainsi l'exécution de code potentiellement dangereux.
Par conséquent, lors de l'évaluation des types de données Python littéraux à partir des entrées utilisateur, il est fortement recommandé d'utiliser ast.literal_eval() plutôt que eval. () pour garantir la sécurité des données et prévenir les failles de sécurité.
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!