Maison >développement back-end >Tutoriel Python >Dans quelle mesure l'utilisation de « eval() » de Python avec des chaînes non fiables est-elle sécurisée ?

Dans quelle mesure l'utilisation de « eval() » de Python avec des chaînes non fiables est-elle sécurisée ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-27 01:36:10292parcourir

How Secure Is Using Python's `eval()` with Untrusted Strings?

Implications sur la sécurité de eval() de Python avec des chaînes non fiables

Lors de l'évaluation de chaînes Python non fiables à l'aide de eval(), plusieurs risques de sécurité surviennent :

1. eval(string, {"f": Foo()}, {})

Ceci n'est pas sûr. Grâce à une instance Foo, on peut accéder à des éléments intégrés tels que « os » et « sys », compromettant potentiellement le système.

2. eval(string, {}, {})

Ceci est également dangereux. Même sans transmettre explicitement un dictionnaire, des éléments intégrés tels que "len" et "list" peuvent être utilisés pour accéder à d'autres API dangereuses.

3. Interdire les éléments intégrés

Il n'existe pas de moyen simple d'empêcher entièrement la présence des éléments intégrés dans le contexte eval(). Des correctifs pour l'interpréteur Python seraient nécessaires.

Risques supplémentaires :

Des chaînes malveillantes telles que "[0] * 100000000" peuvent entraîner l'épuisement des ressources. L'exécution d'expressions arbitraires peut compromettre les données utilisateur et la sécurité du système.

Approches alternatives :

Au lieu d'utiliser eval(), envisagez d'autres méthodes pour gérer les données non fiables. Par exemple :

  • Assainissez l'entrée pour supprimer le code potentiellement dangereux.
  • Utilisez un RestrictedExecutionEnvironment pour limiter la portée de l'exécution du code.
  • Transférez les données à l'aide d'un format de sérialisation sécurisé. qui ne permet pas l'exécution de code arbitraire.

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