Я хочу убедиться, что relativePath
не идет вверх по папке после basePath
.Есть ли надежный способ обнаружить это?
string basePath = "/myfolder/";
string relativePath;
// Invalid
relativePath = "../foo";
relativePath = "subfolder/../../bar";
// Valid, but if too hard this can also be invalid
relativePath = "subfolder/../subfolder2";
// Valid
relativePath = "subfolder/another..folder/";
relativePath = "subfolder/..anotherFolder/";
// There may be ways to circumvent that I haven't thought of...
// Maybe some of these would work
relativePath = " ../";
relativePath = ".. /";
// fullPath should not be above basePath
string fullPath = basePath + relativePath;
Я думаю, что-то вроде следующего может работать
Path.GetFullPath(basePath + relativePath).StartsWith(basePath)
Но я не смог найти VirtualPathUtility.GetFullPath()
или что-то подобное,Я могу запретить ../
в любом месте строки, но может быть способ обойти это с помощью странного пробела, специальных символов и т. Д.