использование функции exec () может быть угрозой безопасности, и по возможности ее следует избегать.
Это немного обобщает - вполне возможно создать безопасное решение, используяexec()
.Но это действительно сложно: есть много подводных камней при выполнении внешних программ, особенно если вы передаете им внешние параметры.
Первый шаг, как вы говорите, состоит в том, чтобы избежать всего, используя escapeshellarg()
для предотвращения внедрениядругих, возможно, вредных команд.
Тогда вопрос в том, какой ущерб может вызвать неправильный ввод значений в вызываемой программе.Например,
при выполнении операции ffmpeg для видео размером 200000 x 200000 пикселей вполне может вызвать зависание сервера, поскольку вызов пытается выделить невозможный объем памяти.Поэтому вам нужно очистить значения размера, которые пользователь может ввести, и выйти, если они слишком большие или не слишком большие.
злонамеренный пользователь может указать ffmpeg использовать файл конфигурации и попробоватьчтобы создать видео из этого, возможно, в результате файл конфигурации будет использоваться в качестве вывода, поэтому вам нужно ограничить диапазон путей к файлам, которые могут указывать пользователи.
И так далее, и так далееon.
Также вам нужно подумать о возможности уничтожения сервера с помощью простого количества запросов.Что если я отправлю 50 запросов в секунду в скрипт PHP, который в свою очередь вызывает сложную команду ffmpeg?Сервер может легко сломаться под нагрузкой, и вы можете захотеть защититься от этого.
Итак: при использовании exec()
не существует внутренней проблемы безопасности, но к каждому входящему параметру, который ему передается, нужно очень внимательно относиться.