Где я должен помещать важные файлы так, чтобы они читались с помощью PHP-скриптов?

Я на хосте Parallels/Plesk VPS, и это действительно вопрос новичков.

Веб-сайт находится по адресу:

/var/www/vhosts/my-domain-name/httpdocs

Существует также путь, называемый:

/var/www/vhosts/my-domain-name/private/

Но PHP-скрипты не могут читать файлы там.

По моему мнению, любой файл, помещенный в веб-корневой каталог, может быть предоставлен публике, если будет запрошен его веб-путь/имя файла. Я смутно знаю об использовании файлов .htaccess, чтобы сообщить Apache не обслуживать определенные файлы /dirs.

Но может (или должен) разместить свой файл с конфиденциальными данными где-то за пределами webroot, сохраняя при этом его чтение скриптами PHP?

Спасибо!

Вот мои ошибки при попытке прочитать файл в папке "private" выше:

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

UPDATE: SOLVED

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/

Ответ 1

Это хорошая практика, хранящая конфиденциальные данные вне корня документа apache.

Вам нужно разрешить PHP обращаться к этим папкам, добавляя или изменяя конфигурацию виртуального хоста.

Ищите    php_value open_basedir

и добавьте ваши папки, разделенные двоеточием (:)

Дополнительная информация на open_basedir

Примечание. Существует несколько проблем безопасности с open_basedir, описанных в

http://www.hardened-php.net/advisory_012004.42.html

EDIT:

Я использую эту древовидную структуру для каждого домена:

domain/            www-data permisions
├── etc            r-x
├── log            rwx
├── phpCache       rwx
├── phpFiler       rwx
├── phpInclude     r-x
├── phpLogs        rwx
├── phpSession     rwx
├── phpTmp         rwx
├── phpTrash       rwx
├── privat         --- 
├── www443         r-x
└── www80          r-x

и т.д.: для файлов конфигурации приложения.

log: для файлов журнала Apache или nginx

phpCache: для файлов Zend_Cache

phpFiler: для файлов приложений PHP script служит, если пользователь имеет привилегии.

phpInclude: php_value include_path

phpLogs: для журналов приложений

phpSessions: для хранения сеансов данных виртуального хоста.

phpTmp: для временных файлов, например, для загрузки.

phpTrash: мусор для phpFiler.

privat: для моих личных ликований

www443: для https document root

www80: для http document root

В open_basedir clausule я помещаю все папки, кроме журнала и привата.

Ответ 2

Это означает, что так называемый safe-mode влияет, что не позволяет открывать файлы и каталоги за пределами данного (например, ваш конкретный веб-сайт). Это очень часто встречается у общих хостеров, и если у вас нет доступа к php.ini, вам не повезло и вы не можете получить доступ к своим файлам в.. /private.

Чтобы получить доступ к защищенным файлам, добавьте каталог под своим обычным httpdocs -directory (например, private) и добавьте .htaccess файл внутри с содержимым

order allow
deny deny from all

Это предотвратит доступ к файлам без прохождения php- script.

В последнем примечании: если ваш php файл был прав в каталоге httpdocs, ваш script должен указывать на ../private/test-dt.txt, а не на ../../private/test-dt.txt.

Ответ 3

Поместите их над корневой папкой. Скрипты PHP все равно будут иметь к ним доступ, но если сайт взломан, тогда каталоги над корневым файлом должны оставаться в безопасности.

Поэтому поместите их где-нибудь как /var/www/vhosts/sensitive-docs/ и установите разрешения в каталоге, чтобы PHP мог читать файлы.