Как запретить веб-доступ к некоторым файлам?


13

Мне нужно сделать операцию немного странно.

Во-первых, я запускаю на Debian apache2 (который работает как пользовательские данные www)

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

Эти файлы расположены в подпапках со структурой, подобной этой:

www.example.com/folder1/car/foobar.txt www.example.com/folder1/cycle/foobar.txt www.example.com/folder1/fish/foobar.txt www.example.com/folder1/fruit/foobar .текст

поэтому имя файла всегда одинаковое, то же самое для «иерархии», просто измените имя папки: /folder-name-static/folder-name-dinamyc/file-name-static.txt

То, что я должен сделать, - это (я думаю) относительно просто: я должен иметь возможность читать этот файл программами на сервере (например, python, php), но если я пытаюсь извлечь содержимое файла с помощью broswer (с помощью ввода URL www. example.com/folder1/car/foobar.txt или через cUrl и т. д.) Я должен получить запрещенную ошибку или что-то еще, но не получить доступ к файлу .

Также было бы неплохо, чтобы даже доступ к этим файлам по FTP был «скрытым», или, во всяком случае, его нельзя было загрузить (по крайней мере, я использую его с корнем ftp и данными пользователя)

Как я могу сделать?

Я нашел это в Интернете, поместите в файл .htaccess:

<Files File.txt>
 Order allow, deny
 Deny from all
</ Files>

Кажется, что это работает, но только если файл находится в корне сети (www.example.com / myfile.txt), а не в подпапках. Кроме того, папки второго уровня (www.example.com/folder1/ fruit /foobar.txt) будут создаваться динамически. Я бы хотел избежать необходимости время от времени изменять файл .htaccess.

Можно создать правило, подобное этому, для всех файлов с данным именем, которое находится на * www.example.com / folder-name-static / * folder-name-dinamyc / *** file-name -static.txt *, где эти части всегда одинаковы , только ** это одно изменение ?

РЕДАКТИРОВАТЬ :

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

/var/www/vhosts/example.com/httpdocs/folder1/car/[other folders and files here]
/var/www/vhosts/example.com/httpdocs/folder1/cycle/[other folders and files here]
/var/www/vhosts/example.com/httpdocs/folder1/fish/[other folders and files here]

//and, then for the 'secrets' files:

/folder1/data/car/foobar.txt
/folder1/data/cycle/foobar.txt
/folder1/data/fish/foobar.txt

Ответы:


20

Вы можете использовать Files / FilesMatch и регулярное выражение:

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

Вот как .htpasswd защищен.

или перенаправить любой доступ .txt к 404:

RedirectMatch 404 \.txt$

Я пытался использовать этот способ, но, похоже, не работает с файлом в подпапках
Strae

Я исправил свои
регулярные выражения

хорошо .. может работает. Но ... регулярное выражение должно быть похоже на RedirectMatch 404 \ myfilename.txt $, верно? Файлы всегда будут иметь одинаковые имена, но в разных папках. И это решение не повлияет на метод FTP, верно?
Strae

Это выглядит правильно ...
rkthkr

Да, я подтверждаю, что это работает ... но мое регулярное выражение RedirectMatch 404 \ myfilename.txt $ должно быть неправильным ... это работает, если я использую RedirectMatch 404 \ .txt $, блокируя все файлы .txt, но не если я использую имя файла в регулярном выражении Любая помощь? я не genuis с регулярным выражением;)
Strae

1

Да, это все возможно. Однако если на сервере есть программы, которым требуется доступ к текстовым файлам, они должны находиться вне корневого веб-каталога. Например, если ваши веб-файлы находятся в ~ / public_html /, вы должны хранить их в ~ / data. Нет причин размещать их в общедоступной папке html.

В дополнение к удалению их из веб-папки убедитесь, что для них правильно установлены разрешения unix. Пользователь сценариев должен иметь доступ для чтения (записи?), Но кому-либо еще не требуется этот доступ.

Если вам НУЖНО хранить эти файлы в папке, доступной через Интернет, есть способы сделать то, что вы просите, через mod_rewrite. Смотрите следующий сайт для многих примеров, один из которых должен отвечать всем требованиям.

http://perishablepress.com/press/2006/01/10/stupid-htaccess-tricks/


Файлы будут создаваться через python или php, затем никогда не редактируются, просто читаются.
Strae

0

Почему бы не использовать стандартные разрешения для файлов Unix, чтобы запретить доступ к файлу?

В википедии есть достойное объяснение прав доступа к файлам Unix.


Как я могу установить разрешения, чтобы позволить php, python, пользователю root обрабатывать эти файлы, а доступ к браузеру - нет?
Strae

0

Поместите файл .htaccess в подкаталог и в утверждении установите AllowOverride All


Так что мне нужен .htaccess для каждой папки уровня 2 °? ммх .. может быть решение .. было бы лучше с 1 .htacces ..
Strae

0

Вы можете использовать Linux ACL .


Истн что, простой файл разрешений? как RWX? Как я могу сделать то, что мне нужно с этим?
Strae

0

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

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

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

Но в каждой папке мне нужно хранить другие файлы, изображения для примеров, которые должны быть доступны через Интернет ... и я до сих пор не думаю, что копирование структуры папок, как в директории web-root, так и вне ее, является надежным способом. , Поэтому мне нужно изменить даже конфигурацию apache, чтобы включить папку config в разрешенный путь php. В любом случае, это не должно быть проблемой.

Так что, если у меня нет лучшего , я должен выбрать менее худший .

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

Любое другое решение приветствуется.


0

Из раздела « Заказная документация»:

Ключевые слова могут быть разделены только запятой; между ними не должно быть пробелов.

Поэтому следующее неверно:

<Files File.txt>
Order allow, deny
Deny from all
</ Files>

Следующее (более) правильно

<Files "File.txt">
Order allow,deny
Deny from all
</Files>
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.