Назад | Перейти на главную страницу

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

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

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

Итак, у меня есть простой текстовый файл с расширением .txt или .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 (цифровая ссылка 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/фрукты/foobar.txt) будет создаваться динамически .. Я бы хотел, чтобы вам не приходилось время от времени изменять файл .htaccess.

Можно создать правило, подобное этому, которое распространяется на все файлы с заданным именем, которое находится на * www.example.com / folder-name-static /* имя-папки-dinamyc / *** имя-файла-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

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

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

Так защищен .htpasswd.

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

RedirectMatch 404 \.txt$

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

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

Итак, следующее неверно:

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

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

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

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

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

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

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

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

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

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

Ты можешь использовать ACL для Linux.

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

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

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

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

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

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

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