diff --git a/cert-generator/cert_server.py b/cert-generator/cert_server.py index 6347ed7..94fec8e 100644 --- a/cert-generator/cert_server.py +++ b/cert-generator/cert_server.py @@ -23,15 +23,13 @@ ROOT = os.path.dirname(SCRIPT_DIR) # racine projet WORK = os.path.join(SCRIPT_DIR, "LISTS_ALL_CERT") # dossier de travail (disque) ARCH = os.path.join(WORK, "archives") -# Blacklist plutôt que whitelist : on autorise tout nom (DN avec « , = » et -# espaces, y compris insécables/Unicode venant de Windows) SAUF ce qui permet -# de sortir du dossier ou de casser le FS. +# Filtre minimal : on accepte n'importe quel nom (DN complet avec « , = \ », +# espaces, Unicode…). On NE bloque QUE ce qui permet de sortir du dossier de +# travail : « / » (séparateur, déjà découpé en amont), « . »/« .. » et l'octet +# nul. « \ » n'est pas un séparateur sous Linux → autorisé (DN à virgule échappée). def safe_name(n): n = (n or "").strip() - if (not n or n in (".", "..") - or "/" in n or "\\" in n - or "\x00" in n - or any(ord(c) < 32 or ord(c) == 0x7f for c in n)): # caractères de contrôle + if not n or n in (".", "..") or "/" in n or "\x00" in n: raise ValueError("nom invalide: %r" % n) return n