Comment coder en toute sécurité la suppression du répertoire en fonction du paramètre?


Andyb

J'ai un script qui orchestre un certain nombre de processus, qui créent tous des journaux dans un emplacement qui est défini dans un fichier de paramètres (c'est-à-dire séparé du script). Avant d'exécuter les processus, le script vide l'emplacement du journal, par exemple

rem LOGLOC is loaded from a parameter file
Del /F /Q /S %LOGLOC%\*.*

Clairement très dangereux. Si pour une raison quelconque LOGLOC était mal défini, cela pourrait être catastrophique. J'ai modifié le script pour ajouter un peu de sécurité ...

if "%LOGLOC%" equ "" (
    ECHO FATAL ERROR: LOGLOC not defined
    exit /b 1
)
Del /F /Q /S %LOGLOC%\*.*

... mais ne tient pas compte des instances où LOGLOC pourrait être accidentellement défini comme '.'ou '..'.

Existe-t-il un meilleur modèle pour vérifier un paramètre avant de l'utiliser d'une manière potentiellement dangereuse?

EDIT: J'ajoute les règles de validation suivantes comme suggéré par Fejese.

  1. Vérifiez que sa longueur est d'au moins 4 caractères, par exemple C: \ L
  2. Validez ce caractère 1 en AZ
  3. Validez que les caractères 2,3 =: \
  4. Validez que le chemin existe et est un répertoire

Si je peux les comprendre, je publierai les résultats, mais le mérite reviendra à Fejese de m'avoir pointé dans la bonne direction ...

engagement

Il n'y aura aucun moyen pour le script de dire si le paramètre obtenu est sûr ou non, à moins que vous ne définissiez certaines règles.

  • Vous pouvez coder en dur un préfixe dans le script qui doit correspondre.
  • Vous pouvez limiter le modèle de suppression pour supprimer uniquement les fichiers journaux, par exemple.

Articles connexes


Comment faire du fil classe java en toute sécurité?

Manish: J'ai une classe java comme ci-dessous class User { String name; String phone; public String getName() { return name; } public String getPhone() { return phone; } } La façon dont cette classe est utilisée es

Modification du paramètre expandtab en fonction du répertoire ?

Don Seiler J'utilise normalement 4 espaces pour l'indentation. Cependant, je soumets occasionnellement des correctifs à des projets OSS et certains d'entre eux utilisent des onglets. Lorsque je fais cela, je ~/.vimrcmodifie généralement mon fichier et le rempl