почему этот файл .htacess не мешает пользователям получать доступ к содержимому, которое я хочу защитить? - PullRequest
0 голосов
/ 16 марта 2012

Я пытаюсь сделать несколько вещей с этим файлом .htacess, но не могу заставить его обслуживать нужные мне изменения, предотвращая несанкционированный доступ к нужным файлам скрытый. Моя цель - разрешить доступ к любому файлу, расположенному в / section / section_name / webroot / через / section_name /. Таким образом, /admin/images/kittens/cat.jpg будет обслуживать /sections/admin/webroot/images/kittens/cat.jpg, если он существует. Я хочу иметь возможность иметь несколько разделов. Если раздел не указан, но файл существует в / section / default / webroot, то я бы хотел, чтобы его обслуживали. Любой другой запрос должен перейти к /dispatcher.php. Я думал, что у меня это работает, пока я не запросил конфигурацию файл в / config и смог его увидеть. Тогда я понял, что могу просмотреть любой файл если бы я знал этот путь.

Как я могу исправить эту проблему с безопасностью, сохраняя при этом исправления перезаписей?

Вот мой файл .htacess:

Options +FollowSymlinks -MultiViews -Indexes
RewriteEngine On

# If a file is requested in the admin webroot, and it exists, allow it to pass through
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^admin(/.*)$ sections/admin/webroot/$1 [L,QSA]

# if the requested url begins with /customers and it is located in /sections/customers/webroot
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^customers(/.*)$ sections/customers/webroot/$1 [L,QSA]

# if the requested url begins with /resellers and it is located in /sections/resellers/webroot
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^resellers(/.*)$ sections/resellers/webroot/$1 [L,QSA]

# if the requested file does not begin with /admin, /customers, or /resellers, and is in /sections/default/webroot, then serve it
RewriteCond %{DOCUMENT_ROOT}/sections/default/webroot/$1 -f
RewriteRule ^(.*)$ sections/default/webroot/$1 [QSA,L,NC]

# Send everything else to the dispatcher
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^(.*)$ dispatcher.php [QSA,L]

Ответы [ 2 ]

0 голосов
/ 16 марта 2012

Добавление этого до конца сработало. Все, что не было действительным файлом, запрошенным в одном из Папки webroot, и это не был вызов dispatcher.php, были перенаправлены диспетчеру.

RewriteCond %{REQUEST_URI} !=/dispatcher.php
RewriteCond %{REQUEST_URI} !^/sections/[a-zA-Z0-9_-]+/webroot/
RewriteCond %{SCRIPT_FILENAME} -f
RewriteRule ^(.*)$ dispatcher.php [QSA,L]
0 голосов
/ 16 марта 2012

Я знаю, что это не совсем решение, но пытались ли вы сократить его до конца, а затем добавить правила по одному, проверяя каждое по пути?Для начала, если вы можете получить файлы в / config, которые вам не нужны, я бы попробовал вырезать все, кроме окончательного правила (которое должно отправлять запросы в / config диспетчеру) и посмотреть, работает ли это.Если это так, продолжайте добавлять вещи обратно медленно, пока не увидите, какое конкретное правило разрешает / config файлы видеть.Тогда вы знаете, что исправить.

...