Заблокируйте прямой доступ к файлам в подпапке, но разрешите индексировать страницу с помощью htacess

В моем домене много папок и подпапок. Я хочу избежать прямого доступа к файлам типов html / jpg / gif / etc в определенных подпапках, но я хочу, чтобы они были доступны на странице index.php.

Структура выглядит примерно так:

  • www.domain.com/folder1
  • www.domain.com/folder2
  • www.domain.com/folder2/subfolder1
  • www.domain.com/folder2/subfolder2
  • www.domain.com/folder2/subfolder2/index.php
  • www.domain.com/folder2/subfolder2/page1.html
  • www.domain.com/folder2/subfolder2/page2.html
  • www.domain.com/folder2/subfolder2/images/1.jpg
  • www.domain.com/folder2/subfolder2/images/2.jpg

Я попытался поместить папку page1.html, page2.html и изображений в новую папку под названием blocked_content:

  • www.domain.com/folder2/subfolder2/index.php
  • www.domain.com/folder2/subfolder2/<▪blocked_content

и добавил .htaccess с deny from all и Order Deny,Allow Deny from all внутри папки blocked_content. Он заблокировал все, даже index.php не может получить доступ к файлам внутри него. Index.php содержит только простые ссылки как <a href="blocked_content/page1.html">

Пробовал эту конфигурацию на .htaccess:

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?domain\.com [NC] 
RewriteRule \.(swf|pdf|css|gif|png|jpg|html|htm)$ - [F]

И поместил его в подпапку2 и не получил никакого эффекта.

Пробовал эту конфигурацию на .htaccess:

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?domain\.com/folder2/subfolder2 [NC] 
RewriteRule \.(swf|pdf|css|gif|png|jpg|html|htm)$ - [F]

Я положил его в подпапку 2: без эффекта. Я помещаю его в корневой каталог, он блокирует все остальные папки.

Я много искал. Я застрял. Что я делаю неправильно? Ставите htacess не в те места или забываете что-то добавить? Я хочу сделать это с помощью .htacess, если это возможно. Включить сеансы php во все файлы html не получится, потому что я не могу изменить имена файлов.


person Leo    schedule 24.09.2012    source источник
comment
Правильно ли я понимаю, что вы хотите заблокировать все запросы, но index.php и возвращать другие ресурсы только тогда, когда сайт index.php отображается в браузере, а контент запрашивается браузером? В таком случае это невозможно (по крайней мере, небезопасно). Пользователь всегда может изменить любые заголовки, которые вы можете проверить.   -  person Mikulas Dite    schedule 25.09.2012
comment
Я нашел способ делать то, что хочу, как они пытались. Нашел инструмент для создания файла .htaccess, и он сработал! Но как пользователь может изменять заголовки, Микулаш? Какой путь будет безопасным?   -  person Leo    schedule 25.09.2012
comment
Если это так, опубликуйте решение в качестве ответа здесь, в разделе «Переполнение стека», или закройте вопрос. Изменить заголовки можно, создав пользовательские запросы, например, с помощью curl (curl.haxx.se).   -  person Mikulas Dite    schedule 25.09.2012
comment
Я очень ценю вашу помощь, Микулаш! Я буду изучать это подробнее! Спасибо!   -  person Leo    schedule 25.09.2012


Ответы (1)


Нашел способ сделать это так, как я пытался.

Использовал веб-инструмент для создания этого .htaccess на этом веб-сайте. ПРЕДОТВРАЩЕНИЕ ГОРЯЧЕЙ ССЫЛКИ ИЗОБРАЖЕНИЙ - КАК ЗАЩИТИТЬ HOTLINK

Поместите .htaccess в мою папку blocked_content /.

Index.php внутри моего домена может получить доступ ко всему в этой папке, но пользователь не может ввести URL-адрес в браузере в качестве горячей ссылки. например: www.domain.com/folder2/subfolder2/blocked_content/images/1.jpg

Разница между новым .htaccess

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?domain.com [NC]
RewriteRule \.(swf|pdf|css|gif|png|jpg|html|htm)$ - [NC,F,L]

К старому:

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?domain\.com [NC] 
RewriteRule \.(swf|pdf|css|gif|png|jpg|html|htm)$ - [F]

PS: @Mikulas Dite сказал мне, что это может быть не так безопасно, как я надеюсь.

person Leo    schedule 24.09.2012
comment
Отличная ссылка! Было бы самым безопасным способом защитить каждый файл с помощью сеанса php, если бы я мог это сделать? - person Leo; 25.09.2012
comment
Это определенно будет (если вы храните SID в файлах cookie и не имеете XSS на своем сайте), но это принесет столько накладных расходов, что, вероятно, того не стоит. Если вы не представляете некоторые секретные данные, и это не является обычным явлением. - person Mikulas Dite; 25.09.2012
comment
Мой текущий проект не слишком классифицирован, но я учту это для другого проекта! Большое спасибо, Микулаш, за помощь! - person Leo; 27.09.2012