Я нахожусь на хосте Parallels / Plesk VPS, и это действительно вопрос новичков.
Веб-сайт находится по адресу:
/var/www/vhosts/my-domain-name/httpdocs
Существует также путь, называемый:
/var/www/vhosts/my-domain-name/private/
Но PHP-скрипты не могут читать файлы там.
По моему мнению, любой файл, помещенный в веб-корневой каталог, может быть предоставлен общественности, если будет запрошен его веб-путь / имя файла. Я смутно знаю об использовании файлов .htaccess, чтобы сообщить Apache не обслуживать определенные файлы / директории.
Но может (или должен) разместить свой файл с конфиденциальными данными где-то за пределами webroot, но все же разрешить чтение PHP-скриптов?
Спасибо!
Вот мои ошибки при попытке прочитать файл в «частной» папке выше:
Warning: file() [function.file]: open_basedir restriction in effect. File(../../private/test.txt) is not within the allowed path(s): (/var/www/vhosts/blah.com/httpdocs:/tmp) in /var/www/vhosts/blah.com/httpdocs/misc/testscript.php on line 8 Warning: file(../../private/test-dt.txt) [function.file]: failed to open stream: Operation not permitted in /var/www/vhosts/blah.com/httpdocs/misc/testscript.php on line 8
ОБНОВЛЕНИЕ: РЕШЕН
Picto в reddit / r / PHPHelp дал мне то, что мне было нужно, и он специфичен для систем Plesk. Мне пришлось написать файл с именем vhost.conf, помещенный в папку conf, которая существует на том же уровне, что и httpdocs. И в vhost.conf я использовал:
<Directory /var/www/vhosts/my-domain-name/httpdocs> php_admin_value open_basedir /var/www/vhosts/my-domain-name/httpdocs:/tmp:/var/www/vhosts/my-domain-name/myfolder </Directory>
Поэтому теперь я размещаю свои файлы в «myfolder», который находится за пределами webroot (httpdocs). После этого, чтобы эти настройки вступили в силу (перезапуск Apache не работает), есть некоторые конкретные команды Plesk, которые можно найти: http://www.gadberry.com/aaron/2006/02/09/plesk_vhost/
Это хорошая практика хранения конфиденциальных данных за пределами apache document root.
Вы должны разрешить PHP обращаться к этим папкам, добавляя или изменяя конфигурацию виртуального хоста.
Найдите php_value open_basedir
и добавьте ваши папки, разделенные двоеточием (:)
Больше информации на open_basedir
Примечание. Существует несколько проблем безопасности с open_basedir, которые объясняются в
http://www.hardened-php.net/advisory_012004.42.html
РЕДАКТИРОВАТЬ:
Я использую эту древовидную структуру для каждого домена:
domain/ www-data permisions ├── etc rx ├── log rwx ├── phpCache rwx ├── phpFiler rwx ├── phpInclude rx ├── phpLogs rwx ├── phpSession rwx ├── phpTmp rwx ├── phpTrash rwx ├── privat --- ├── www443 rx └── www80 rx
и т. д.: для файлов конфигурации приложения.
log: для файлов журнала Apache или nginx
phpCache: для файлов Zend_Cache
phpFiler: для файлов приложения скрипт PHP служит, если у пользователя есть привилегии.
phpInclude: php_value include_path
phpLogs: для журналов приложений
phpSessions: для хранения сеансов данных виртуального хоста.
phpTmp: для временных файлов, например, для загрузки.
phpTrash: мусор для phpFiler.
приват: для моих личных высыпаний
www443: для https document root
www80: для http document root
В open_basedir clausule я помещаю все папки, кроме журнала и привата.
Это означает, что так называемый safe-mode
влияет, что не позволяет открывать файлы и каталоги за пределами данного каталога (например, ваш конкретный веб-корень). Это очень часто встречается у общих хостеров, и если у вас нет доступа к php.ini, вам не повезло и не удается получить доступ к вашим файлам в ../private.
Чтобы получить доступ к защищенным файлам, добавьте каталог под своим обычным httpdocs
-directory (например, private) и добавьте файл .htaccess
внутри с содержимым
order allow deny deny from all
Это предотвратит доступ к файлам без прохождения вашего php-скрипта.
В последнем примечании: если ваш php-файл был прав под каталогом httpdocs
, ваш сценарий должен указывать на ../private/test-dt.txt
а не на ../../private/test-dt.txt
.
Поместите их над корневой папкой. PHP-скрипты по-прежнему будут иметь к ним доступ, но если сайт взломан, тогда каталоги над корневым файлом должны оставаться в безопасности.
Поэтому поместите их где-нибудь в качестве /var/www/vhosts/sensitive-docs/
и установите разрешения для каталога, чтобы PHP мог читать файлы.