Як заборонити доступ до Інтернету до деяких файлів?


14

Мені потрібно зробити операцію трохи дивно.

По-перше, я запускаю 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 .txt

отже, ім'я файлу завжди однакове, ditto для 'ієрархії', просто змініть ім’я папки: /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/ фрукт / 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

Відповіді:


21

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

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

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

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

RedirectMatch 404 \.txt$

Я спробував це використати, але здається, що не працює над файлом у
підпапках

Я виправив свої реджекспи, вибачте ...
rkthkr

ок .. може працювати. Але .. regexp має бути як RedirectMatch 404 \ myfilename.txt $, правда? Файли завжди будуть однаковими, але в різних папках. І це рішення не вплине на метод FTP, правда?
Strae

Це виглядає правильно ...
rkthkr

Так, я підтверджую, що він працює ... але мій regexp RedirectMatch 404 \ myfilename.txt $ повинен помилятися .. він працює, якщо я використовую RedirectMatch 404 \ .txt $, блокуючи всі файли .txt, але не, якщо я використовую ім'я файлу в регексп. Будь-яка допомога? im not genuis with regexp;)
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 °? mmh .. може бути рішення .. було б краще з 1 .htacces ..
Strae

0

Ви можете використовувати Linux ACL .


Istn, що простий файл дозволяє? як rwx? Як я можу зробити з цим те, що мені потрібно?
Strae

0

Прочитавши всіх вас, я помітив, що файл .htaccess може бути для мене способом: впливайте лише на файли в папці, де він є.

Але мої папки динамічно генеруються. Я не думаю, що копіювати .htaccess файл або відтворювати його кожного разу, коли я створюю нову папку, це надійний спосіб.

Як сказав Дейв, логічним способом має бути зберігання конфігураційних текстових файлів за межами веб-доступної папки.

Але в кожній папці я повинен зберігати інші файли, зображення для прикладів, які повинні бути доступними в Інтернеті ... і я все ще не думаю, що копія структури папок у веб-кореневій директорії є надійним способом. . Тому мені потрібно змінити навіть конфігурацію apache, щоб включити конфігураційну папку в дозволений шлях до 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.