Maison  >  Article  >  développement back-end  >  Comment échapper en toute sécurité aux caractères pour les appels os.system() ?

Comment échapper en toute sécurité aux caractères pour les appels os.system() ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-28 20:39:02421parcourir

How to Safely Escape Characters for os.system() Calls?

Caractères d'échappement pour les appels os.system()

Lors de l'utilisation de os.system(), il est crucial de garantir un échappement correct des noms de fichiers et des arguments. . Voici une solution qui résout ce problème et prend en charge plusieurs systèmes d'exploitation et shells, principalement bash.

Utilisation de guillemets

L'approche la plus simple et la plus sécurisée consiste à entourer les commandes et arguments entre guillemets doubles ou simples :

os.system("my_command 'argument with spaces'")

S'échapper à l'aide de shlex ou de pipes

Si les guillemets ne conviennent pas, les modules shlex ou pipes peuvent être utilisés pour échapper les caractères :

  • shlex.quote(string) : cette fonction échappe aux caractères spéciaux dans les chaînes, ce qui les rend sûrs à transmettre à bash.
  • pipes.quote(string) : similaire à shlex.quote(), mais pour les anciennes versions de Python (prend en charge Python 2 et 3).

Exemple d'utilisation

Supposons que vous souhaitiez exécuter la commande "cat input.txt | grep 'trouver quelque chose' | sort > output.txt" en utilisant os.system(). En utilisant shlex.quote(), le code serait :

import shlex

cmd = "cat {} | grep '{}' | sort > {}".format(
    shlex.quote("input.txt"),
    shlex.quote("find something"),
    shlex.quote("output.txt"),
)
os.system(cmd)

Notes sur la sécurité

Alors que os.system() offre un moyen rapide et direct d'exécuter commandes système, il est important de prendre en compte les failles de sécurité potentielles. Assurez-vous que les entrées générées par l'utilisateur ou non fiables sont correctement validées et nettoyées avant d'utiliser os.system().

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