Удаление команд оболочки В java?
У меня есть веб-сервис, который будет принимать некоторые данные от компьютеров, прошедших проверку подлинности, как XML (это для системы управления сетью, которую я интегрирую с каким-либо другим программным обеспечением) и выполнить оболочку script с некоторыми из данных XML в качестве аргументов.
В Java (/Linux), какой лучший способ избежать команд оболочки, чтобы кто-то не смог передать вредоносные аргументы в мой веб-сервис?
В основном в чрезвычайно упрощенном примере, Im принимает некоторый ввод через WS
<foo>
<bar>ABCDEF</bar>
</foo>
then running somescript.pl <<data in <bar> field>> here
Мне нужно убедиться, что это невозможно использовать для выполнения произвольных команд оболочки и т.д.
Спасибо!
Ответы
Ответ 1
Я бы предложил использовать ProcessBuilder или один из методов Runtime.exec, который не запускается через оболочку и, следовательно, не требует экранирования оболочки, чтобы избежать атак атаки (здесь).
Также полезно рассмотреть использование процесса STDIN для передачи данных XML - Perl может тривиально обрабатывать чтение из STDIN. Обычно существуют ограничения с аргументами командной строки.
Счастливое кодирование.
Ответ 2
Patch: https://issues.apache.org/jira/browse/LANG-1066
Это действительно давняя проблема.
Ответ 3
Если вы не можете использовать ProcessBuilder, вы можете рассмотреть Apache commons-text escapeXSI
.
(не говоря уже о имени). XSI - это расширение X/Open System Interfaces Extension, дополнительная спецификация Single UNIX Specification, поэтому все который пытается быть UNIX-подобным, более или менее соответствует этому).