Frage

Ich bin meinen Code (C #, Desktop-Anwendung) mit CAT.NET Code-Analyse und bekomme „Desinfizieren des Dateipfad vor der Übergabe an Dateisystemroutinen“ Nachricht zu analysieren, wenn sie mit Dateinamen zu tun. Was ich nicht verstehe ist, dass der Dateiname gültig ist, um sicherzustellen, verwende ich:

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

Ist es nicht eine „magische Lösung“, um Probleme mit ungültigen Dateinamen zu lösen? Ich habe gelesen, etwas Ähnliches hier (erste Antwort), aber in meinem Fall bin ich nur den Umgang mit den lokalen Dateien, nun ja, etwas sehr einfach, so ...

Also, warum ich diese Meldung bin immer und wie zu tun bekommen, es zu vermeiden?

War es hilfreich?

Lösung

Ich weiß, das ist eine alte Frage, aber ich komme gerade über etwas, das an die CAT.Net Fehlermeldung speziell im Zusammenhang hilfreich sein kann.

a Blog-Post über die CAT.Net Datenflußregeln, haben sie dies über den FileCanonicalizationRule zu sagen:

Beschreibung:

  

Benutzereingabe in der Datei Behandlungsroutinen führen zu können potenziell genutzt   Die Datei Kanonisierung Verletzlichkeit. Code ist besonders anfällig   wenn es zu Kanonisierungsprobleme macht alle auf den Namen basierte Entscheidungen   eine Ressource, die zu dem Programm als Eingabe übergeben wird. Dateien, Pfade,   und URLs sind Ressourcentypen, die anfällig für die Kanonisierung sind   weil in jedem Fall gibt es viele verschiedene Möglichkeiten, die vertreten   gleiche Namen.

Auflösung

  

Desinfizieren der Dateipfad vor es vorbei Behandlungsroutinen einzureichen.   Verwenden Path.GetInvalidFileNameChars oder Path.GetInvalidPathChars zu erhalten   die ungültigen Zeichen und aus dem Eingang entfernen. Mehr   Informationen finden Sie unter    http://msdn.microsoft.com/en- us / library / system.io.path.getinvalidfilenamechars.aspx .

Also, sie schlagen vor, dass Sie verwenden Path.GetInvalidFileNameChars und Path.GetInvalidPathChars validieren Sie Ihre Wegen.

Beachten Sie, dass ihr Vorschlag ist, Entfernen die ungültigen Zeichen. Während dies in der Tat wird der Pfad gültig machen, kann es zu unerwartetem Verhalten für den Benutzer entstehen. Da die Kommentare auf diese Frage / Antwort deutet darauf hin, es ist wahrscheinlich besser, früh zu beenden und dem Benutzer zu sagen, dass ihr Weg ungültig ist, eher (wie schlechte Zeichen zu entfernen und unter Verwendung der modifizierten Version) als etwas unerwartetes mit ihrem Input zu tun.

Andere Tipps

Wenn der Dateiname von einem Benutzer kommt, es könnte etwas wie „../../../../etc/passwd“ - die Fehlermeldung Ihnen sagt, dass Sie es sanieren müssen, so dass es ‚t get auf Verzeichnisse ist es nicht sollte.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top