Внедрение командной строки Checkmarx ⇐ JAVA
-
Anonymous
Внедрение командной строки Checkmarx
Мы используем ProcessBuilder на Java для выполнения программы Python на компьютере с Linux. Мы добавили все проверки, предложенные Checkmarx, а затем попытались выполнить приведенный ниже пример, предоставленный Checkmarx.
public String ExecuteSystemCommand_WithParameters (запрос HttpServletRequest) выдает ServletException, IOException { Строковая командаResult = ""; Строка userCommand = request.getParameter("Команда"); userCommand = userCommand.replaceAll("[^A-Za-z0-9]", ""); пытаться { Построитель ProcessBuilder = новый ProcessBuilder("/bin/sh/","-c", PROGRAM_NAME, пользовательская команда); Map environ = builder.environment(); setEnvironmentVars (окружающая среда); Подпроцесс процесса = builder.start(); BufferedReader irProcOutput = новый BufferedReader(новый InputStreamReader(subProc.getInputStream())); Строковая линия = ноль; while ((line = irProcOutput.readLine()) != null) командаРезультат += строка; irProcOutput.close(); } catch (исключение ex) { handleExceptions (ex); } вернуть командуРезультат; } Однако этот образец, предоставленный Checkmarx в качестве решения, также приводит к тому же дефекту. Пожалуйста, сообщите, что можно изменить в приведенной ниже программе, чтобы устранить уязвимость внедрения командной строки.
Мы используем ProcessBuilder на Java для выполнения программы Python на компьютере с Linux. Мы добавили все проверки, предложенные Checkmarx, а затем попытались выполнить приведенный ниже пример, предоставленный Checkmarx.
public String ExecuteSystemCommand_WithParameters (запрос HttpServletRequest) выдает ServletException, IOException { Строковая командаResult = ""; Строка userCommand = request.getParameter("Команда"); userCommand = userCommand.replaceAll("[^A-Za-z0-9]", ""); пытаться { Построитель ProcessBuilder = новый ProcessBuilder("/bin/sh/","-c", PROGRAM_NAME, пользовательская команда); Map environ = builder.environment(); setEnvironmentVars (окружающая среда); Подпроцесс процесса = builder.start(); BufferedReader irProcOutput = новый BufferedReader(новый InputStreamReader(subProc.getInputStream())); Строковая линия = ноль; while ((line = irProcOutput.readLine()) != null) командаРезультат += строка; irProcOutput.close(); } catch (исключение ex) { handleExceptions (ex); } вернуть командуРезультат; } Однако этот образец, предоставленный Checkmarx в качестве решения, также приводит к тому же дефекту. Пожалуйста, сообщите, что можно изменить в приведенной ниже программе, чтобы устранить уязвимость внедрения командной строки.
Мобильная версия