2010-04-21 4 views
59

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

+0

Может вы посмотрите на [это] [1] [1] : http://stackoverflow.com/q/43951871/2441637 –

ответ

77

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

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

Order deny,allow 
Deny from all 

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

Cheers.

+0

Я использовал эту внутреннюю аудио папку, но она останавливает мой аудиоплеер для воспроизведения звука.Я использую звуковой менеджер 2 для воспроизведения звука. Есть ли какая-нибудь работа, позволяющая только звуковому менеджеру воспроизводить этот аудиофайл, но останавливать любой прямой доступ? – sonill

+3

@sonill - Вы можете белым списком определенных IP-адресов, чтобы иметь возможность доступа к этим каталогам. Например, добавление новой строки с 'Allow from 127.0.0.1' позволит вашему серверу, включая любой код на стороне сервера, обращаться к файлам в этом каталоге. Дополнительная документация по этим битам доступна по адресу http://httpd.apache.org/docs/2.4/mod/mod_access_compat.html#allow –

+1

«Однако есть много хостинговых компаний, которые предоставляют вам доступ к корневому веб-сайту. " Почему эти компании не могут положить корни на один уровень ниже корня FTP? У них нет нулевого знания о том, как работает PHP (или, скорее, это скорее надзор) или они заботятся только о своей собственной безопасности и деньгах? Ну, просто выберите компанию, которая на самом деле наплевает на безопасность вашего сайта. – FluorescentGreen5

2

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

28

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

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

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

1

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

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

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

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

2

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

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

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

service httpd configtest 

затем (изящная перезагрузка)

service httpd graceful 
Смежные вопросы