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

У меня есть рабочий 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 ответа

Решение

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

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

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

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


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

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

Другие вопросы по тегам