PHP - Использование Exec для запуска файла JAR с пользовательскими параметрами - PullRequest
2 голосов
/ 04 марта 2011

У меня есть рабочий exec в php, который выполняет Jar-файл и возвращает результат:

exec('java -jar Clt.jar ' . $sampleSize . ' ' . $numberOfSamples . ' ' . $randAlgorithm,  $output);

Эти параметры проверяются в приложении Java следующим образом:

int sampleSize = Integer.parseInt(args[0]);
int numberOfSamples = Integer.parseInt(args[1]);
int randGenerator = Integer.parseInt(args[2]);

Теперь мне нужно знать, нужно ли мне проверять ввод пользователя, потому что на странице PHP в exec он говорит:

При разрешении передачи пользовательских данных в эту функцию используйте escapeshellarg () илиescapeshellcmd (), чтобы гарантировать, что пользователи не могут обмануть систему в выполнении произвольных команд.

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

Ответы [ 3 ]

2 голосов
/ 04 марта 2011

But in my case, where user input is used only as parameter for application

И в этом вы ошибаетесь.exec() - как если бы вы выполняли строку в командной строке.Что делать, если пользователь вводит что-то вроде: ; rm -rf / && echo.Вы должны экранировать ввод с помощью escapeshellargs().Или даже лучше использовать floatval() перед передачей в командную строку.

0 голосов
/ 04 марта 2011

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

Вы должны всегда правильно экранировать (особенно) небезопасных данных!


При создании команд, которые должны выполняться системой, вы должны использовать функцию escapeshellarg().

0 голосов
/ 04 марта 2011

Абсолютно.Существует множество хаков-оболочек, которые позволят пользователю избежать вашей команды и выполнить произвольные команды в вашей системе.Использование &&, трубопроводов и т.д ...

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