Где я должен разместить конфиденциальные файлы, чтобы они могли быть прочитаны PHP-скриптами? - PullRequest
10 голосов
/ 13 сентября 2011

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

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

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

Существует также путь под названием:

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

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

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

Но могу ли (или должен) я разместить свой чувствительный файл где-нибудь вне веб-корня, но при этом разрешить его чтение сценариями 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

ОБНОВЛЕНИЕ: решено

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/

Ответы [ 3 ]

10 голосов
/ 13 сентября 2011

Рекомендуется хранить конфиденциальные данные вне корня документа apache.

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

Найдите php_value open_basedir

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

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

Примечание: есть несколько проблем безопасности с open_basedir, объясненных в

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

РЕДАКТИРОВАТЬ:

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

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-скрипт обслуживает его, если у пользователя есть права.

phpInclude: php_value include_path

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

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

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

phpTrash: корзина для phpFiler.

Приват: для моих личных потоков

www443: для https документа root

www80: для http документаroot

В клаузуле open_basedir я ставлю все папки кроме лога и приват.

3 голосов
/ 13 сентября 2011

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

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

order allow
deny deny from all

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

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

2 голосов
/ 13 сентября 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...