Итак, типично, если какие-либо проблемы возникают из вашего программного обеспечения для анализа, это действительно единственное решение, которое не позволяет пользователю выбирать свой собственный путь.Путь Манипуляции Решение?
Я создал этот простой метод, который бы сделал некоторые проверки в защите от этих атак.
private const string directory = "Windows";
private static readonly string[] extensions = {".pdf", ".txt"};
string userInput = @"..\windows\..\krnl386.exe";
private static bool Validate(string filePath)
{
if (string.IsNullOrEmpty(filePath))
{
return false;
}
if (filePath.ToUpper().Contains(directory.ToUpper()))
{
return false;
}
string ext = Path.GetExtension(filePath);
for (int x = 0; x < extensions.Length; x++)
{
if (ext.Equals(extensions[x]))
{
return true;
}
}
return false;
}
Теперь бы эти две проверки помогают предотвратить любые «Path Манипуляции»? Какие отверстия в этом методе вы видите? Приложения, к которым это относится, никогда не нуждаются в доступе к каталогу Windows, и не будут использовать больше, чем расширение .pdf
или .txt
.
Хорошая точка при создании расширений без учета регистра. Я вижу вашу точку в «MyWindowsStuff», но я думаю, что это был бы редкий случай, и я бы не подумал, что мне придется приспособиться к такому редкому делу. Хм .. никогда не думал о коротких именах, может также изучить это. –
@ programmer117: Посмотрите мое обновление относительно проверки «windows». –
Отлично! Это будет работать намного лучше. Я вижу вашу мысль. Спасибо за помощь! –