Maison >développement back-end >Tutoriel Python >Comment puis-je transmettre en toute sécurité des variables à « subprocess.Popen() » sans risques de sécurité ?

Comment puis-je transmettre en toute sécurité des variables à « subprocess.Popen() » sans risques de sécurité ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-02 19:17:10628parcourir

How Can I Safely Pass Variables to `subprocess.Popen()` Without Security Risks?

Surmonter les pièges du passage de variables dans Subprocess.Popen()

Dans de nombreux scripts, il est nécessaire d'appeler des programmes externes avec des arguments. Lorsque ces arguments sont stockés dans des variables, des problèmes peuvent survenir avec subprocess.Popen(). Bien que cela puisse paraître simple, ce processus peut être entravé par certains pièges.

L'un de ces pièges se produit lors de l'utilisation de shell=True. Cette option traite les arguments différemment sur les systèmes Unix, conduisant à un comportement inattendu. Pour relever ce défi, il est recommandé de supprimer shell=True.

Exemple :

Considérez le scénario suivant :

import subprocess

# Populate a list of arguments
args = ["mytool.py"]
for opt, optname in zip("-a -x -p".split(), "address port pass".split()):
    args.extend([opt, str(servers[server][optname])])
args.extend("some additional command".split())

# Run the script without shell=True
p = subprocess.Popen([sys.executable or 'python'] + args, stdout=subprocess.PIPE)

Avec cette approche, les arguments sont gérés avec précision, permettant au programme externe de recevoir les entrées prévues.

Considérations de sécurité :

Il est important à noter que la définition de shell=True pour les commandes avec entrée externe présente un risque pour la sécurité. Comme expliqué dans la documentation du sous-processus, cette pratique peut exposer votre script à des vulnérabilités potentielles.

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