Domanda

Sto analizzando il mio codice (C #, l'applicazione desktop) con CAT.NET analisi del codice e ottenere "disinfettare il percorso del file prima di passare in un file routine di sistema" messaggio quando si tratta di nomi di file. Quello che non capisco è che per garantire il nome del file è valido, io uso:

void SomeMethod(String filename)
{
    filename = System.IO.Path.GetFullPath(filename);
    // ... Do stuff
}

Non è una "soluzione magica" per risolvere i problemi con i nomi di file non validi? Ho letto qualcosa di simile qui (prima risposta), ma nel mio caso ho a che fare solo con i file locali, bene, qualcosa di molto semplice, quindi ...

Quindi, perché sto ottenendo questo messaggio e come fare per evitare di ottenerlo?

È stato utile?

Soluzione

So che questa è una vecchia questione, ma ho appena incontrato qualcosa che può essere utile in particolare in relazione al messaggio di errore CAT.Net.

In una post sul blog circa le regole di flusso dati CAT.NET, hanno questo da dire circa l'FileCanonicalizationRule:

Descrizione

  

Input utente utilizzato nelle routine di gestione di file potenzialmente può portare a   File Canonicalization vulnerabilità. Codice è particolarmente suscettibile   a canonica problemi se rende tutte le decisioni in base al nome   di una risorsa che viene passato al programma come input. I file, i percorsi,   e URL sono tipi di risorsa che sono vulnerabili alla canonica   perché in ogni caso ci sono molti modi diversi di rappresentare il   stesso nome.

Risoluzione

  

disinfettare il percorso del file prima di passare in un file routine di gestione.   Utilizzare Path.GetInvalidFileNameChars o Path.GetInvalidPathChars per ottenere   i caratteri non validi e li rimuovono dall'input. Di Più   le informazioni sono disponibili all'indirizzo    http://msdn.microsoft.com/en- us / library / system.io.path.getinvalidfilenamechars.aspx.

Quindi, essi suggeriscono di utilizzare Path.GetInvalidFileNameChars e Path.GetInvalidPathChars per convalidare la percorsi.

Si noti che il loro suggerimento è quello di Rimuovi i caratteri non validi. Anche se questo sarà davvero rendere il percorso valido, può causare un comportamento imprevisto per l'utente. Come i commenti su questo domanda / risposta suggerire è probabilmente meglio a smettere presto e raccontare l'utente che il percorso non è valido, piuttosto di fare qualcosa di inaspettato con il loro contributo (come la rimozione personaggi cattivi e utilizzando la versione modificata).

Altri suggerimenti

Se il nome del file proviene da un utente, potrebbe essere qualcosa di simile a "../../../../etc/passwd" - il messaggio di errore è che ti dice che è necessario sterilizzare in modo che esso può 't arrivare alle directory che non dovrebbe.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top