2016-12-28 15 views
0

Итак, типично, если какие-либо проблемы возникают из вашего программного обеспечения для анализа, это действительно единственное решение, которое не позволяет пользователю выбирать свой собственный путь.Путь Манипуляции Решение?

Я создал этот простой метод, который бы сделал некоторые проверки в защите от этих атак.

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.

ответ

1

Это предотвращает любой путь, содержащий слово «окна», независимо от случая. Поэтому «MyWindowsStuff» будет исключен. Вероятно, вы захотите, чтобы расширения также не учитывали регистр-регистр.

Вы также должны работать над полным путем, а не только по относительному пути.

Достаточно ли этого достаточно. Считаете ли вы возможным или вероятным, что кто-то будет использовать короткие имена файлов для доступа к ограниченному каталогу? Например, если вы хотите, чтобы люди не попадали в каталог «Program Files», вам нужно было бы получить короткое имя этого каталога и сравнить с ним. В моей системе «Program Files» есть «PROGRA ~ 1», а «Program Files (x86)» - «PROGRA ~ 2».

Что касается вашего комментария о "MyWindowsStuff", это редкий случай. Что делать, если у кого-то есть файл с именем «windows.txt», который представляет собой описание окон, которые он хочет разместить в своем доме? Или каталог «Windows», который является подкаталогом папки «Документы», где он собирает цитату для окон, которые он собирается установить для клиента? Ваш «редкий случай» не так редок, вы можете это сделать.

Единственным каталогом «Windows», который вы хотите заблокировать, является каталог Windows, который не обязательно называется «Windows». Вы получаете имя этого каталога, вызвав Environment.GetFolderPath:

Environment.GetFolderPath(Environment.SpecialFolder.Windows) 

Любого другой каталог под названием «Windows» или содержащее слово «окно» не каталог Windows, и не должны быть заблокированы, и не должен имя пути который содержит слово «окна» в имени файла.

+0

Хорошая точка при создании расширений без учета регистра. Я вижу вашу точку в «MyWindowsStuff», но я думаю, что это был бы редкий случай, и я бы не подумал, что мне придется приспособиться к такому редкому делу. Хм .. никогда не думал о коротких именах, может также изучить это. –

+1

@ programmer117: Посмотрите мое обновление относительно проверки «windows». –

+0

Отлично! Это будет работать намного лучше. Я вижу вашу мысль. Спасибо за помощь! –