Как мне ограничить использование PHP-приложений их собственными каталогами и их собственным php.ini?
-
11-07-2019 - |
Вопрос
Я запускаю несколько PHP-приложений на своем Mac, под управлением OS X 10.5.6, Apache 2, PHP 5.У меня есть настройки поддоменов для каждого проекта, записи файла хоста для каждого поддомена и блоки виртуальных каталогов в конфигурации Apache.Итак
project1.localhost переходит в /Library/WebServer/Documents/Project1
project2.localhost переходит в /Library/WebServer/Documents/Project2
и т.д...
Однако этот метод на самом деле не "изолирует" веб-приложения.Например, если я включу скрипт следующим образом:
<?php
include("/includes/include.php");
?>
Он ссылается на скрипт из базового каталога моего компьютера.Таким образом, он получает доступ
C:/includes/include.php
Есть ли у меня способ сделать это ссылкой
C:/Library/WebServer/Documents/Project2/includes/include.php
По сути, сделайте так, чтобы он не знал ни о чем за пределами своего собственного каталога.Кроме того, есть ли способ использовать php.ini для каждого поддомена?
Решение
Я считаю, что можно установить php.ini для каждого виртуального хоста
<VirtualHost *:80>
...
PHPINIDir /full/path/to/php/ini/
</VirtualHost>
таким образом, вы можете настроить open_basedir и другие
Другие советы
Вы можете ограничить возможность скриптов видеть что-либо выше определенного дерева папок, добавив open_basedir - открытая база данных укажите блок папки в файле httpd.conf.Это должно выглядеть так:
<DIRECTORY full="" path="" to="" folder="" containing="" script="" />
php_admin_value open_basedir "/полный/путь/к/верхней/папке/из/желаемого/дерева/"
</DIRECTORY>
Одна вещь - если вы не заканчиваете путь символом /, то это совпадение с подстановочным знаком.Другими словами, "/var/etc/my" будет соответствовать "/var/etc/MyFolder", а также "/var/etc/myMothersFolder", в то время как "/var/etc/my/" будет соответствовать только этому точному имени папки.
Относительно изоляции приложения ~ это касается защиты PHP-скриптов, чтобы они не могли получить доступ к другим? Пожалуйста, уточните -
Что касается php.ini - я не знаю ни одного способа использования определенного php.ini для каждого каталога, но вы наверняка могли бы создать страницу включения php с кучей строк ini_set (), возможно, что-то вроде этого .. р>
<?php
// in your header or along top of all php modules in your pap
require_once ( '/path/to/includes/ini_set.php' );
// ...
?>
и скрипт ini_set.php:
<?php
// one of these for each override of defaults set in php.ini file --
ini_set ( $varname, $newvalue );
ini_set ( $varname, $newvalue );
ini_set ( $varname, $newvalue );
?>
Если вы хотите узнать больше о функции ini_set (), вот страница документации на php.net: http://us3.php.net/ini_set р>
Надеюсь, это было несколько полезно ~
Лучший способ сделать это - использовать PHP через FCGI (mod_fcgid).Таким образом, вы можете запустить PHP, используя другого пользователя и другой php.ini для каждого виртуального хостинга.
Вот пример того, как настроить такую конфигурацию в Ubuntu: http://www.howtoforge.com/how-to-set-up-apache2-with-mod_fcgid-and-php5-on-ubuntu-8.10
Если вы хотите использовать полное имя пути, вы можете использовать это:
<?php
include dirname( __FILE__ ) . '/includes/include.php';
?>
<Ч>
Попробуйте использовать относительный путь!Нравится:
<?php
include("./includes/include.php");
?>
или
<?php
include("includes/include.php");
?>