2014-10-24 2 views
2

Недавно я использовал AppScan Source для сканирования кодирования, и он нашел одну из находки, которую я не знаю, как исправить и перейти к сканеруКак предотвратить Path Traversal в Java

Вот мой код.

public void init() 
{ 
String prefix = getServletContext().getRealPath("/"); 
String file = getInitParameter("log4j-init-file"); 

String pth = "C:\\wls1034\\user_projects\\domains\\base_domain\\servers\\AdminServer\\tmp\\_WL_user\\SimulationService\\39m5yi\\war\\WEB-INF"; 
String n= prefix+file; 

File fileExists = new File(n); 
if (fileExists.exists()) { 
      PropertyConfigurator.configure("C:\\wls1034\\user_projects\\domains\\base_domain\\servers\\AdminServer\\tmp\\_WL_user\\SimulationService\\39m5yi\\war\\WEB-INF" + file); 
      } else { 
      BasicConfigurator.configure(); 
      } 
} 

Я попытался добавить инструкцию if, чтобы проверить любой специальный символ в пути. Однако сканер по-прежнему сообщает об обнаружении в «File fileExists = new File (n)»;

public void init() 
{ 
String prefix = getServletContext().getRealPath("/"); 
String file = getInitParameter("log4j-init-file"); 

String pth = "C:\\wls1034\\user_projects\\domains\\base_domain\\servers\\AdminServer\\tmp\\_WL_user\\SimulationService\\39m5yi\\war\\WEB-INF"; 
String n= prefix+file; 
//For Security Checking 
if (file != null && !n.contains("../") && !n.contains("$") && !n.contains("*"))//Check the path whether it's included risk character 
{ 

File fileExists = new File(n); 
if (fileExists.exists()) { 
      PropertyConfigurator.configure("C:\\wls1034\\user_projects\\domains\\base_domain\\servers\\AdminServer\\tmp\\_WL_user\\SimulationService\\39m5yi\\war\\WEB-INF" + file); 
      } else { 
      BasicConfigurator.configure(); 
      } 
} 
} 
+0

В чем проблема сейчас? Я понимаю, но пока не ясно –

+0

Сканер обнаруживает обнаружение в File fileExists = new File (n); Перед сканированием я не добавляю оператор if, чтобы проверить имя файла. –

ответ

2

Это всего лишь ложное положительное значение от сканера. Не существует риска для безопасности с указанным выше кодом, поскольку пользовательский ввод не используется для чтения или записи на путь.

+1

Да. AppScan обрабатывает параметры init/config как испорченный источник, потому что он поступает извне кода, но на самом деле в подавляющем большинстве случаев он не находится под контролем злоумышленника (или если он уже полностью потерян). – bobince

0

Сканер управляет файловыми дорожками с переменными.

var sr = new StreamReader("C:\\....\\WEB-INF" + file); 

Как уже упоминалось, Ахмад обычно является ложным. Но рекомендуется проверить, что вредоносный пользователь не может использовать код и получить доступ к файлам, которые не были предназначены.

Чтобы сделать сканер счастливым, вы можете предоставить его жестко закодированными путями или создать оператор switch для каждого возможного пути к файлу.

switch (fileId) 
    { 
     case "1": 
      sr = new StreamReader("C:\file-1"); 
      break; 
     case "2": 
      sr = new StreamReader("C:\file-2"); 
      break; 
    } 

Но кто хочет сделать это!

Ваш лучший вариант - обеспечить отсутствие угрозы и убедить людей безопасности, чтобы ваш код продолжался.