Secondo me, è principalmente responsabilità del sistema operativo prevenire le eliminazioni indesiderate.
Ad esempio, le cartelle più importanti sono protette da scrittura da Windows 7. La loro eliminazione fallirà con un'eccezione. Su Unix, dovrai assicurarti che siano in possesso delle autorizzazioni appropriate per il file system e non puoi fare molto danno.
Tuttavia, conosciamo tutti un amministratore di sistema che ci ha raccontato la storia del suo comando rm -rf /
accidentale, pubblicato come root.
Come per le applicazioni: assicurati che le autorizzazioni del filesystem siano configurate ragionevolmente, quindi puoi prevenire almeno qualche danno. È consigliabile eseguire applicazioni con i privilegi minimi necessari.
Se il tuo programma deve essere eseguito come root, per qualsiasi motivo, quindi inserire un codice per verificare se la posizione da eliminare non è fondamentale per il sistema. O chroot il sistema per l'applicazione.
Puoi anche white-list le directory che possono essere cancellate e ricontrollare ogni volta, se questo ti fa sentire al sicuro. Ma la corruzione della memoria, per esempio, ha la possibilità di sfondare qualsiasi routine di validazione. Se disponi di dati temporanei, conservali in una cartella ben nota e non distribuirli su tutto il sistema.
Modifica: Ora ho parlato con vari colleghi di lavoro e abbiamo ispezionato i nostri codici e indovinato: tutte le directory che stiamo eliminando sono costanti codificate. Ci sono solo alcuni casi in cui i file vengono cancellati, principalmente per estensione o il nome con cui iniziano. Quindi nella maggior parte dei casi un altro livello di validazione è semplicemente inutile e un test unitario è sufficiente per assicurarsi che la directory corretta sia cancellata o cancellata.
Ora, potrebbero esserci altri casi in cui i percorsi sono combinati con variabili di ambiente e così via. Ma quando la variabile d'ambiente è impostata sul valore sbagliato e si colpisce per caso una directory che non avrebbe dovuto essere cancellata, chi avrebbe dovuto farlo se non il sysadmin? Chiaramente, questo rientra nelle sue responsabilità allora.
L'unico caso limite che posso immaginare sono le eliminazioni tramite espressioni regolari. Ma a che servono le espressioni regolari per l'eliminazione quando si desidera convalidare i nomi dei file con l'elenco bianco? O a che servono le convalide tramite espressioni regolari quando si eliminano le espressioni regolari?
L'unico caso in cui suggerirei una sorta di convalida whitelist è quando concatenate ciecamente le stringhe per creare un nome di directory. Ma preferirei avere un test unitario decente per questo.
E protezione contro la corruzione della memoria: beh, c'è poco che puoi fare, perché non puoi garantire alcun tipo di comportamento quando ciò accade.