Блокируйте прямой доступ к файлу через http, но разрешите доступ к PHP скрипт

Я загружаю свои файлы (pdf, doc, flv и т.д.) в буфер и обслуживаю их для своих пользователей с помощью script. Мне нужен мой script, чтобы иметь доступ к файлу, но не разрешать прямой доступ к нему. Каков наилучший способ достичь этого? Должен ли я делать что-то с моими разрешениями или блокировать каталог с .htaccess?

Ответ 1

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

Тем не менее, существует много хостинговых компаний, которые предоставляют вам доступ к корневому веб-сайту. Чтобы по-прежнему предотвратить HTTP-запросы к файлам, поместите их в каталог самостоятельно с файлом .htaccess, который блокирует все коммуникации. Например,

Order deny,allow
Deny from all

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

Приветствия.

Ответ 2

Вот как я запретил прямой доступ с URL-адресами к моим ini файлам. Вставьте следующий код в файл .htaccess в корневой каталог. (нет необходимости создавать дополнительную папку)

<Files ~ "\.ini$">
  Order allow,deny
  Deny from all
</Files>

Мой settings.ini файл находится в корне, и без этого кода доступен www.mydomain.com/settings.ini

Ответ 3

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

Ответ 4

в httpd.conf для блокировки браузера и wget-доступа для включения файлов, особенно скажем db.inc или config.inc. Обратите внимание, что вы не можете связать типы файлов в директиве, а не создавать несколько директив файлов.

<Files ~ "\.inc$">
Order allow,deny
Deny from all
</Files>

чтобы проверить конфигурацию перед перезапуском apache

service httpd configtest

затем (изящный перезапуск)

service httpd graceful

Ответ 5

Если у вас есть доступ к вам файл httpd.conf(в ubuntu он находится в каталоге /etc/apache 2), вы должны добавить те же строки, что и в файл .htaccess в конкретном каталоге. Это (например):

ServerName YOURSERVERNAMEHERE
<Directory /var/www/>
AllowOverride None
order deny,allow
Options -Indexes FollowSymLinks
</Directory>

Сделайте это для каждого каталога, который вы хотите контролировать информацию, и у вас будет один файл в одном месте, чтобы управлять всем доступом. В приведенном выше примере я сделал это для корневого каталога, /var/www.

Эта опция может быть недоступна с использованием стороннего хостинга, особенно для общего хостинга. Но это лучший вариант, чем добавление многих файлов .htaccess.