Блокировать прямой доступ к файлу через http, но разрешить доступ к php-скрипту - PullRequest
69 голосов
/ 21 апреля 2010

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

Ответы [ 7 ]

89 голосов
/ 21 апреля 2010

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

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

Order deny,allow
Deny from all

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

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

32 голосов
/ 21 марта 2012

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

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

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

2 голосов
/ 12 января 2016

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

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

для проверки вашей конфигурации перед перезапуском apache

service httpd configtest

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

service httpd graceful
2 голосов
/ 21 апреля 2010

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

1 голос
/ 23 января 2014

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

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

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

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

0 голосов
/ 16 февраля 2019

Как насчет скрипта .htaccess на основе пользовательских модулей (как он используется в CodeIgniter)? Я пытался, и это работало хорошо в приложениях CodeIgniter. Есть идеи использовать его в других приложениях?

<IfModule authz_core_module>
    Require all denied
</IfModule>
<IfModule !authz_core_module>
    Deny from all
</IfModule>
0 голосов
/ 07 апреля 2018

Чтобы запретить INI-файлам доступ к сети, поместите в apache2.conf

следующее
<Files ~ "\.ini$">
Order allow,deny
Deny from all
</Files>
...