Вопрос

Здравствуйте, у меня есть пара вопросов о PHP exec() и passthru().

1)
Я никогда не использовал exec() в PHP, но я видел, что иногда он используется с imagemagick.Теперь мне любопытно, каковы некоторые другие распространенные области применения, где exec хорош в веб-приложении?

2)
Около 6 лет назад, когда я впервые начал играть с PHP, я на самом деле ничего не знал, только самые простые вещи, и у меня был сайт, который был взломан, и кто-то настроил там собственный PHP-файл, который использовал функцию passthru () для передачи большого количества трафика через мой сайт для загрузки бесплатной музыки или видео, и я получил плату за пропускную способность в размере 4000 долларов с моего хостинга!6 лет спустя я знаю намного больше о том, как использовать PHP, но я все еще не понимаю, как это вообще происходило со мной раньше.Как кто-то может добавить файл на мой сервер с помощью неправильного кода?

Это было полезно?

Решение

1] Exec() действительно полезен, когда вы:

А) Хотите запустить программу/утилиту на сервере, для которого в php нет эквивалента команды.Например, ffmpeg — это обычная утилита, запускаемая через вызов exec (для всех видов преобразования мультимедиа).

Б) Запуск другого процесса, который вы можете заблокировать или НЕ блокировать, — это очень мощно.Однако иногда вам нужен pcnt_fork или аналогичный вместе с правильными аргументами CL для неблокировки.

C) Другой пример: когда мне нужно обработать XSLT 2.0, мне нужно выполнить exec() небольшой запущенный мной Java-сервис для обработки преобразований.Очень кстати.PHP не поддерживает преобразования XSLT 2.0.

2] Черт, как жаль.Ну, много способов.Существует семейство уязвимостей под названием «уязвимости, включающие удаленный файл», которые по сути позволяют злоумышленнику включить произвольный источник и, таким образом, выполнить его на вашем сервере.Взгляни на: http://lwn.net/Articles/203904/

Кроме того, как упоминалось выше, скажите, что вы делаете что-то вроде (значительно упрощенно):

exec("someUnixUtility -f $_GET['arg1']"); 

Ну, представьте, что злоумышленник это делает, url.come?arg1="blah;rm -rf /", ваш код в основном будет сводиться к следующему:

exec("someUnixUtility -f blah; rm -rf /");

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

То же самое и с загрузкой файла: представьте, что вы удаляете последние четыре символа (.ext), чтобы найти расширение.А как насчет чего-то вроде этого «exploit.php.gif», тогда вы удаляете расширение, получая эксплойт.php, и перемещаете его в папку /users/imgs/.Что ж, все, что злоумышленнику теперь нужно сделать, это перейти к пользователям/imgs/exploit.php, и он сможет запустить любой код, который захочет.В этот момент вы принадлежали вам.

Другие советы

  1. Использование exec или когда вы хотите запустить другую программу.

  2. Тот самый документация для passthru говорит:

Предупреждение

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

Вероятно, кто-то обнаружил брешь в безопасности в вашем скрипте, которая позволяла им запускать произвольные команды.Используйте данные функции для очистки ваших входных данных в следующий раз.Помните, что ничто, отправленное от клиента, не может когда - либо будьте уверены.

exec() позволяет вам использовать скомпилированный код, находящийся на вашем сервере, который будет работать быстрее, чем интерпретируемый PHP.

Итак, если у вас есть большой объем обработки, который нужно выполнить быстро, exec() может быть полезно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top