Запретить прямой доступ к любым файлам в папке с помощью apache/php

Это может показаться повторяющимся вопросом, но я попробовал решение, приведенное в аналогичных вопросах.

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

Другие решения предлагают использовать .htaccess

deny from all
allow from 127.0.0.1

Но это, кажется, запрещает файлы отовсюду. Включая локальные сценарии php.

Я рассматриваю .htpasswd, но это дополнительный уровень учетных данных пользователя, который необходимо обрабатывать, и я бы предпочел этого избежать.

Как мне обойти это? Есть ли лучший способ хранения файлов?


person Einar Sundgren    schedule 30.05.2013    source источник
comment
вышеуказанное решение должно работать. если ваши локальные скрипты не делают что-то «странное» (например, доступ к локальным файлам через http)   -  person    schedule 31.05.2013
comment
Я знаю, что я тоже этого ожидал. Но когда я вызываю ‹?php include('file.php')?›, он явно не читает его. И я не думаю, что включение можно считать очень странным.   -  person Einar Sundgren    schedule 31.05.2013
comment
Вариант .htaccess - это то, что вам нужно. Он отклонит весь каталог, включая скрипт, через который вы хотите их обслуживать, если он там есть. Решение - переместить скрипт в другое место.   -  person Will Warren    schedule 31.05.2013
comment
Разве вы не можете просто переместить файлы из веб-корня? Это кажется очевидным решением для файлов, которые можно обслуживать только с помощью php-скриптов.   -  person jeroen    schedule 31.05.2013
comment
здесь должно быть что-то еще.   -  person    schedule 31.05.2013
comment
Я бы переместил их из корня веб-сайта, если бы мне было позволено. Но отель, в котором я живу, не дает мне такой возможности.   -  person Einar Sundgren    schedule 31.05.2013


Ответы (2)


htaccess не может запретить доступ к файлам через php с помощью функций include/require. Если ваш php include не обращается к файлу, проблема заключается в пути к файлу.

person Danny    schedule 30.05.2013
comment
Тем не менее включение работает, когда я удаляю запрет из .htaccess. Не могу объяснить причины, и я хотел бы знать, есть ли какой-либо вывод об ошибке, который может показать мне, что происходит. - person Einar Sundgren; 31.05.2013

Каким-то образом php был ограничен

deny from all
allow from 127.0.0.1

для включения и запроса файлов в затронутых папках. Это противоречит тому, что я могу прочитать в документации Apache, как это должно работать, и у меня нет реального ответа, почему. Проблема сохранялась как на моем локальном хосте с использованием Xampp, так и на веб-отеле one.com.

Мой первоначальный вопрос был плохо сформирован, так как я использовал require, чтобы проверить, имел ли я доступ для чтения к папке, когда я действительно хотел использовать readfile.

Моя главная забота заключалась в том, что я хотел обслуживать файлы для загрузки из недоступного каталога. И

readfile($filename);

все еще мог получить доступ к файлам.

Суть этой проблемы заключалась в том, что я понял, что readfile() и include() каким-то образом получают разные разрешения. Я не мог найти это ни в одной документации.

person Einar Sundgren    schedule 11.06.2013