CAT.NET „Desinfizieren des Dateipfad vor, es zu Dateisystemroutinen passing“ Nachricht
-
22-09-2019 - |
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?
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.