Comment coder en toute sécurité la suppression du répertoire en fonction du paramètre?
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.
- Vérifiez que sa longueur est d'au moins 4 caractères, par exemple C: \ L
- Validez ce caractère 1 en AZ
- Validez que les caractères 2,3 =: \
- 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 ...
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.