Экранирование команд оболочки В Java? - PullRequest
14 голосов
/ 24 мая 2011

У меня есть веб-сервис, который принимает некоторые входные данные от аутентифицированных машин в формате XML (это для системы управления сетью, которую я интегрирую с другим программным обеспечением) и выполняю сценарий оболочки с некоторыми данными XML в качестве аргументов.

В Java (/ Linux), каков наилучший способ избежать команд оболочки, чтобы гарантировать, что кто-то не сможет передать вредоносные аргументы моему веб-сервису?

В основном в очень упрощенном примере, я принимаю некоторые входные данные черезWS

<foo>
<bar>ABCDEF</bar>
</foo>

then running somescript.pl <<data in <bar> field>> here

Мне нужно убедиться, что это нельзя использовать для выполнения произвольных команд оболочки и т. Д.

Спасибо!

Ответы [ 3 ]

12 голосов
/ 24 мая 2011

Я бы предложил , используя ProcessBuilder или один из методов Runtime.exec , который не проходит через оболочку и, таким образом, не требует экранирования оболочки , чтобы избежатьинъекционные атаки (здесь).

Также может быть полезно рассмотреть возможность использования канала STDIN процесса для передачи XMLданные - Perl может легко обрабатывать чтение из STDIN.Обычно есть ограничения для аргументов командной строки.

Удачное кодирование.

1 голос
/ 16 ноября 2014

Патч поставляется: https://issues.apache.org/jira/browse/LANG-1066

Это действительно давняя проблема.

0 голосов
/ 12 октября 2017

Если вы не можете использовать ProcessBuilder, вы можете рассмотреть Apache commons-text escapeXSI.

(не говоря уже о названии - XSI - это расширение X / Open System Interfaces, дополнительная спецификация к Single UNIX Specification , поэтому все, что пытается быть UNIX-подобным, более или менее соответствует этому) .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...