2014-10-15 2 views
1

Мы используем концепцию инъекции команды, используя следующий код,OS Command Threat Injection безопасности

Runtime.getRuntime().exec(cmd); 

но система определила это как угрозу безопасности, так что кто-то может предложить любой другой способ или какой-либо API сторонних производителей доступен для выполнения этой команды. Любая помощь могла бы быть полезна.

+0

Как только вы выполните команду System, угроза здесь. Независимо от того, какой API вы используете – yunandtidus

+0

Я прочитал в вики Owasp, что инъекция команды всегда является угрозой безопасности. Для справки см. [Ввод команд в Java] (https://www.owasp.org/index.php/Command_injection_in_Java) – dasrohith

+0

Этот вопрос может быть слишком широким для ответа, потому что слишком мало контекста. – SpaceTrucker

ответ

0

Вы можете использовать ProcessBuilder.

Для получения дополнительной информации об уменьшении угроз см. Приведенные рекомендации here.

5

Я думаю, что вы должны использовать ProcessBuilder, этот класс используется для создания процессов операционной системы, потому что разработчикам следует избегать вызова оболочки с использованием Runtime.exec, чтобы вызывать конкретные команды операционной системы и вместо этого использовать API Java.

Каждый экземпляр ProcessBuilder управляет набором атрибутов процесса. Метод start() создает новый экземпляр процесса с этими атрибутами. Метод start() может быть вызван повторно из одного и того же экземпляра для создания новых подпроцессов с идентичными или связанными атрибутами.

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

Process p = new ProcessBuilder("myCommand", "myArg").start(); 

Вот пример, который запускает процесс с модифицированной рабочей директории и окружающей среды, и перенаправляет стандартный вывод и ошибки быть прилагается к файлу журнала:

ProcessBuilder pb = new ProcessBuilder("myCommand", "myArg1", "myArg2"); 
Map<String, String> env = pb.environment(); 
env.put("VAR1", "myValue"); 
env.remove("OTHERVAR"); 
env.put("VAR2", env.get("VAR1") + "suffix"); 
pb.directory(new File("myDir")); 
File log = new File("log"); 
pb.redirectErrorStream(true); 
pb.redirectOutput(Redirect.appendTo(log)); 
Process p = pb.start(); 
assert pb.redirectInput() == Redirect.PIPE; 
assert pb.redirectOutput().file() == log; 
assert p.getInputStream().read() == -1; 

Помните, что поддерживается с java 5 и далее, и Class не синхронизирован.

Проверить Links--

Source Doc

Code Samples