Weighing eval() et ast.literal_eval() dans Python Security
Lors du traitement des entrées utilisateur, il est impératif de donner la priorité à la sécurité. eval(), une fonction Python puissante, apparaît souvent comme une solution potentielle, mais des inquiétudes concernent ses risques potentiels. Cet article examine les différences entre eval() et ast.literal_eval(), en soulignant leurs implications en matière de sécurité.
Comprendre eval()
eval() évalue l'entrée dès sa saisie, quelle que soit la vérification de type ultérieure. Cela signifie qu’une entrée malveillante peut être exécutée avant que vous ayez la possibilité de l’atténuer. L'extrait de code suivant illustre cette vulnérabilité :
datamap = eval(input('Provide some data here: '))
Présentation de ast.literal_eval()
ast.literal_eval() est une alternative plus sûre à eval() qui ne Je n'exécute pas de code tant qu'il n'est pas jugé sûr. Il valide l'entrée pour garantir qu'elle représente un littéral Python, tel qu'un dictionnaire, une liste ou un tuple. Si l'entrée ne correspond pas à ce format, une exception est générée, empêchant ainsi l'exécution du code malveillant.
try: datamap = ast.literal_eval(input('Provide some data here: ')) except ValueError: return # Handle invalid input
Bonnes pratiques
Pour des raisons de sécurité, il est fortement recommandé Il est recommandé d'utiliser ast.literal_eval() autant que possible, en particulier lorsqu'il s'agit d'entrées non fiables ou incertaines. Eval() doit être évité en raison de son potentiel d'exploitation.
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!