csharp / intermediate
Snippet
Eingabebereinigung zur Vermeidung von Path Traversal
Um Sicherheitslücken wie Path Traversal zu verhindern, sollte man immer den vollständigen Pfad auflösen und prüfen, ob er sich noch im vorgesehenen Basisverzeichnis befindet. Benutzer versuchen oft, Verzeichnisse mittels '../' Sequenzen zu verlassen.
snippet.cs
csharp
1
2
3
4
5
6
7
8
9
string baseDirectory = Path.GetFullPath("C:\\App\\Data");string userInput = "../../secrets.txt";string fullPath = Path.GetFullPath(Path.Combine(baseDirectory, userInput));if (!fullPath.StartsWith(baseDirectory, StringComparison.OrdinalIgnoreCase)){throw new SecurityException("Access denied: Path traversal detected.");}
Erklärung
1
Path.GetFullPath(...)
Löst alle relativen Segmente und '..' auf, um den tatsächlichen absoluten Pfad auf der Festplatte zu finden.
2
fullPath.StartsWith(baseDirectory, ...)
Validiert, ob der resultierende Pfad ein Unterverzeichnis des sicheren Basisverzeichnisses ist.