Maison >développement back-end >Tutoriel Python >« eval » est-il sûr pour une API de calculatrice en Python ?

« eval » est-il sûr pour une API de calculatrice en Python ?

DDD
DDDoriginal
2024-10-26 19:21:02733parcourir

 Is `eval` Safe for a Calculator API in Python?

Python : rendre eval sécurisé pour l'API de la calculatrice

La question cherche des conseils sur la mise en œuvre d'une « API de calculatrice » en Python à l'aide de la fonction eval et s’enquiert de ses préoccupations en matière de sécurité. Pour garantir la sécurité de l'utilisation d'eval à cette fin, il est crucial de comprendre ses risques potentiels et de mettre en œuvre les mesures appropriées.

Comme indiqué dans la réponse, eval présente des risques de sécurité en raison de sa capacité à exécuter du code Python arbitraire, ce qui donne aux utilisateurs la possibilité de manipuler des variables locales et d’accéder à des informations sensibles. Pour atténuer ces risques, la solution proposée implique l'utilisation d'un environnement isolé avec un accès restreint aux ressources système, comme le montre l'exemple fourni :

<code class="python">env = {}
env["locals"] = None
env["globals"] = None
env["__name__"] = None
env["__file__"] = None
env["__builtins__"] = None

eval(users_str, env)</code>

Bien que cette approche tente d'éviter les interférences avec les variables locales, elle est reconnue qu'il n'est peut-être pas assez complet. La réponse affirme à juste titre qu'un pirate informatique intelligent pourrait encore trouver des moyens de contourner ces précautions.

Par conséquent, pour une sécurité renforcée, il est recommandé d'éviter d'utiliser eval pour des expressions complexes ou du code fourni par l'utilisateur. Au lieu de cela, envisagez d'utiliser un package d'analyse tel que ply ou pyparsing pour gérer l'entrée et fournir plus de contrôle sur l'environnement d'exécution du code. Ces packages offrent une approche structurée pour analyser les expressions et garantir leur 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!

Déclaration:
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