В приложениях ASP.NET вы можете использовать Server.MapPath(filename)
, что вызовет исключение, если сгенерированный путь выходит за пределы корня вашего приложения.
Если все, что вам нужно, это безопасное имя файла, и вы просто хотите, чтобы все файлы были там, это станет проще;
FileInfo file = new FileInfo(
Server.MapPath(
Path.Combine(@"c:\example\mydir", filename)));
Если вы находитесь за пределами ASP.NET, как вы указали, вы можете использовать Path.GetFullPath
.
string potentialPath = Path.Combine(@"c:\myroot\", fileName);
if (Path.GetFullPath(potentialPath) != potentialPath)
// Potential path transversal
Или вы вызываете Path.GetFullPath, а затем проверяете, что начало его соответствует каталогу, к которому вы хотите заблокировать.