Можно ли защитить каталог / файл на сервере от внешнего мира, но сделать его доступным для PHP? - PullRequest
1 голос
/ 07 августа 2010

Мне было интересно: можно ли защитить каталог / файл на сервере от внешнего мира, но сделать его доступным для PHP?

Это довольно просто.Я кэширую веб-страницы на моем сервере с помощью PHP в определенном каталоге, но я не хочу, чтобы веб-пользователи просматривали эти файлы или этот каталог напрямую.PHP, с другой стороны, должен иметь возможность доступа к этим файлам (чтобы предоставить их пользователю).Это может показаться нелогичным, но я пытаюсь ограничить определенные страницы пользователей и по-прежнему иметь возможность кэшировать их в формате веб-сервера.

Желательно что-то с .htaccess или chmod.

Спасибо!

Ответы [ 2 ]

6 голосов
/ 07 августа 2010

Абсолютно - на самом деле вам не нужно использовать .htaccess.Просто поместите защищенный каталог над корневым каталогом вашего документа (то есть храните его рядом с папкой, в которой хранятся ваши PHP-скрипты, обычно это «htdocs», «httpdocs» или иногда просто «www»).веб-файлы будут в /my/folders/httpdocs/, а ваши «защищенные» файлы будут в /my/folders/protected_folder/

Идея в том, что PHP может получить доступ к любой папке на сервере, но Apache не позволит пользователю перемещаться«над» корневым каталогом.

Для доступа к каталогу вы можете использовать:

$protected_path = $_SERVER['DOCUMENT_ROOT'].'/../protected_folder/';

(Кстати, вы упомянули, что делаете это для кэширования страниц- возможно, вы захотите взглянуть на Smarty , механизм шаблонов PHP, который предварительно компилирует ваши шаблоны и также поддерживает очень умное кэширование. И на самом деле, одна из "лучших практик" Smarty - это настройка вашегоструктура, так что файлы шаблонов и кеша не находятся ни в папке, ни в папке document_root, поэтому пользователи, заходящие из Apache, никогда не смогут получить к ним доступ, но код Smarty PHP может легко получить все, что ему нужно.)

2 голосов
/ 07 августа 2010

Конечно, просто поместите файлы в каталог за пределами вашего веб-корня.Например, если ваш веб-корень - /usr/local/apache/htdocs/, вы можете создать каталог /usr/local/apache/private_cache/, к которому PHP должен иметь доступ, но нет способа получить к нему доступ через веб-запрос.

Вы также можете поместить файл .htaccess, состоящий из строки deny from all, в каталог, который хотите защитить.Это не позволит Apache (но не PHP) обслуживать файлы.

...