Saisie utilisateur Python - Saisie utilisateur Python - Comment obtenir la saisie utilisateur en Python

La mauvaise façon d'obtenir les données de l'utilisateur en Python (et l'alternative sécurisée)

Lorsque vous saisir () Ça va mal

Un script de déploiement Python a demandé une commande console. Une erreur de saisie a déclenché une opération erronée et a interrompu la compilation de production. C'est le danger des saisies utilisateur en Python : une seule chaîne non vérifiée peut provoquer une injection, une perte de données ou un contournement logique. Examinons pourquoi cela se produit et comment gérer les saisies utilisateur en Python en toute sécurité, tant dans les projets open source qu'internes.

Le problème avec entrée utilisateur() Python

Le saisir () Une fonction Python est simple : elle lit le texte de la console et le renvoie sous forme de chaîne. Aucune validation, aucun contrôle. Isolément, cela semble inoffensif. Mais dans les scripts de production, CI/CD emplois et outils d'automatisation, le passage d'entrées utilisateur Python brutes directement dans des commandes ou des fonctions ouvre la porte à des vulnérabilités.

python
user_command = input("Enter command: ")
simulate_system_call(user_command)  # Simulated function for demonstration

⚠️ Exemple pédagogique uniquement, non fonctionnel ou exploitable

Si vous vous demandez comment obtenir la saisie de l'utilisateur en Python en toute sécurité, la réponse est simple : ne lui faites jamais aveuglément confiance.

Risques et gestion sécurisée dans DevSecOps Pipelines

Les entrées utilisateur Python non sécurisées peuvent s'infiltrer dans différents étapes du cycle de vie du logiciel :

  • CI/CD scripts qui déploient ou construisent des artefacts
  • Outils de développement internes contrôler les environnements
  • Intégrations tierces qui supposent que l’entrée est sûre.

Si une dépendance traite les entrées utilisateur Python sans validation, vous héritez de ce risque, même si votre code est sécurisé. C'est pourquoi la validation doit être appliquée de manière cohérente dans l'ensemble du système. pipeline.

Exemple pipeline risque:

python
# ⚠️ Educational example only — not functional
env_target = input("Enter deployment environment: ")
simulate_deploy(env_target)  # Simulated for demonstration

Préventif CI/CD application de la loi:

yaml
stages:
  - validate
validate_input:
  script:
    - python scripts/check_input_safety.py
  rules:
    - if: '$CI_COMMIT_BRANCH == "main"'
      when: never

plats à emporter clés: Savoir comment obtenir les entrées des utilisateurs en Python de manière sécurisée n'est que la moitié du travail ; l'application automatisée garantit le code non sécurisé n'atteint jamais la production.

Vecteurs d'attaque courants

Les saisies utilisateur non sécurisées en Python peuvent entraîner bien plus que de simples données erronées. Les risques courants incluent :

Contournement logique, en ignorant l'authentification ou en modifiant le flux via une entrée élaborée.

python
# ⚠️ Educational example only — not functional or exploitable
code_snippet = input("Provide code: ")
simulate_code_execution(code_snippet)  # Simulated evaluation for demonstration

Si vous vous fiez à la saisie brute de l'utilisateur en Python, vous donnez le contrôle à l'utilisateur ou à l'attaquant.

L'alternative sécurisée : validation et nettoyage des entrées

Le but n'est pas de supprimer saisir () de tout code, il s'agit de garantir que la saisie de l'utilisateur Python est validée avant qu'elle ne touche à des opérations critiques.

L'approche la plus sûre pour obtenir la saisie de l'utilisateur en Python est la suivante :

  • Appliquer les contrôles de type
  • Appliquer des listes blanches pour les valeurs autorisées
  • Utilisez des bibliothèques d'analyse sécurisées comme argumenter et pydantique.

Comparaison rapide

Scénario Exemple non sécurisé Exemple sécurisé
Utilisation directe de input()

# ⚠️ Educational example only
user_name = input("Enter username: ")
simulate_process(user_name)
        

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--username", type=str)
args = parser.parse_args()
process(args.username)
        
Validation structurée

# ⚠️ Educational example only
age = input("Enter your age: ")
        

from pydantic import BaseModel, ValidationError
class UserInput(BaseModel):
    age: int
try:
    data = UserInput(age=int(input("Enter your age: ")))
except ValidationError as e:
    print("Invalid input:", e)
        

Bonnes pratiques pour la saisie utilisateur Python :

  • Convertir les types et gérer les erreurs (essayer / sauf)
  • Appliquer des listes blanches pour les valeurs connues
  • Utilisez le argumenter pour CLI et pydantique pour les données structurées

Détection des entrées non sécurisées et application de la loi CI/CD avec Xygeni

L'examen manuel ne suffit pas à détecter toutes les entrées utilisateur Python non sécurisées ; l'automatisation est essentielle. Des outils comme Xygéni Analyser les référentiels à la recherche de modèles Python de saisie utilisateur sans nettoyage. Une fois intégré à CI/CD, ils échouent à la tâche de sécurité si une gestion d'entrée non sécurisée est détectée. Cela bloque la fusion dans les branches protégées jusqu'à ce que le problème soit résolu.

Scénario Exemple non sécurisé Exemple sécurisé
Utilisation directe de input()

# ⚠️ Educational example only — not functional
name = input("Enter username: ")
simulate_process(name)  # Simulated for demonstration
        

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--username", type=str)
args = parser.parse_args()
process(args.username)  # Validated by argparse
        
Validation structurée

# ⚠️ Educational example only — not functional
age = input("Enter your age: ")
        

from pydantic import BaseModel, ValidationError

class UserInput(BaseModel):
    age: int

try:
    data = UserInput(age=int(input("Enter your age: ")))
except ValidationError as e:
    print("Invalid input:", e)
        
CI/CD mise en vigueur

# Missing automated checks allows
# unsafe input patterns to slip in
# during reviews/merges.
        

jobs:
  security_scan:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Run Xygeni Scan
        run: xygeni scan \
          --rules detect-unsafe-input \
          --fail-on-findings
        

Comment ça marche:

  1. Xygeni recherche les entrées utilisateur Python non sécurisées.
  2. S'il est trouvé, il renvoie un code de sortie différent de zéro.
  3. CI/CD marque le travail comme ayant échoué.
  4. La protection des branches bloque la fusion jusqu'à ce que le problème soit résolu.

Cela explique comment obtenir les entrées des utilisateurs en Python de manière sécurisée et automatique.

Plats à emporter

Ne faites jamais confiance aux saisies utilisateur Python sans validation. Une seule entrée non sécurisée saisir () peut conduire à des violations, à des échecs de déploiement ou à une compromission totale.

Plan d'action:

  • Valider dès le départ :  appliquer la conversion de type, les listes blanches et les bibliothèques comme argumenter or pydantique avant de traiter les entrées utilisateur Python.
  • Automatiser la détection :  configurer pipelines pour bloquer les fusions lorsque des modèles non sécurisés sont détectés.
  • Renforcer avec des barrières de sécurité :  intégrer des outils comme Xygeni pour blocage automatique dans les branches protégées.
  • Formez votre équipe :  assurez-vous que tout le monde sait comment obtenir les entrées des utilisateurs en Python en toute sécurité et comprend les risques liés au fait de sauter la validation.

La sécurité des applications ne commence pas en production; cela commence dès que vous écrivez la première ligne de code. Définissez la gestion sécurisée des entrées comme valeur par défaut.

sca-tools-logiciel-outils-d'analyse-de-composition
Priorisez, corrigez et sécurisez vos risques logiciels
Essai gratuit 7 jours
Pas de carte bleue requise

Sécurisez le développement et la livraison de vos logiciels

avec la suite de produits Xygeni