как запретить 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/
Вы можете посмотреть параметр конфигурации open_basedir. Не совсем ответ на ваш вопрос, но он связан. Хорошая идея - установить basedir для каждого сайта, например "/ var / www / site: / usr / share / php: / tmp". (/ Usr / share / php может отличаться на каждой машине).
Чтобы действительно ответить на ваш вопрос: вы также можете поместить это в .htaccess:
<Files *.sh>
ForceType 'text/plain; charset=UTF-8'
</Files>