Назад | Перейти на главную страницу

Как запретить PHP выполнять команды оболочки?

как запретить apache выполнять сценарии bash ?? Что любой скрипт php не может выполнить команду в bash (например, команду, которая добавит ссылки на мои файлы php и html). Есть ли способ сделать это??

EDIT: у меня на уме была любая команда bash, а не только файлы .sh

Apache сам по себе не может «выполнять» сценарии или команды bash. Я думаю, что вы действительно задаете вопрос: «Как я могу запретить PHP выполнять команды оболочки?».

К сожалению, два других ответа здесь неверны и предоставляют неадекватные решения для этого.

open_basedir влияет только на то, какие файлы могут быть открыт с помощью PHP, например через fopen(). Вы можете проверить, можно ли выполнять команды оболочки, используя этот тривиальный код:

<?php
ini_set('open_basedir', '/tmp');
system('ls');

Чтобы по-настоящему ограничить, какие команды оболочки могут быть казнен на PHP вы должны использовать безопасный режим. Однако вы должны знать, что безопасный режим устарел в PHP 5.3 и, безусловно, будет удален в будущей версии. Включение безопасного режима ограничивает доступ к количество «небезопасных» функций, особенно exec(), system(), и passthru().

Однако, опять же, вы должны знать, что использование безопасного режима очень обескураженный.

Как только безопасный режим будет удален, у вас больше не будет средств для ограничения того, какие команды могут выполняться PHP.

Вы можете отключить доступ к определенным функциям в PHP с помощью disable_functions директива в php.ini, например:

disable_functions = exec,system,print

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

ссылка:

http://www.cyberciti.biz/faq/linux-unix-apache-lighttpd-phpini-disable-functions/

http://www.webhostgear.com/319.html

Вы можете посмотреть параметр конфигурации open_basedir. Не совсем ответ на ваш вопрос, но он связан. Хорошая идея - установить basedir для каждого сайта, например "/ var / www / site: / usr / share / php: / tmp". (/ Usr / share / php может отличаться на каждой машине).

Чтобы действительно ответить на ваш вопрос: вы также можете поместить это в .htaccess:

<Files *.sh>
  ForceType 'text/plain; charset=UTF-8'
</Files>