Контроль доступа к файлам с помощью mod_rewrite - PullRequest
2 голосов
/ 19 ноября 2010

Я хочу ограничить доступ к файлам в Apache. Список запрещенных файлов должен быть переменным. Если доступ к файлу ограничен и конкретный файл cookie не найден, пользователь следует перенаправить на веб-сайт (с возможностью получения файла cookie) - если он был найден, файл будет «загружен».

Я бы хотел решить эту проблему с помощью mod_rewrite.

Я думаю, что я перенаправляю все запросы в скрипт handler.php.

Этот "handler.php" ищет запрос и решает, разрешен ли доступ. Нет проблем, пока здесь.

Проблема в том, что - если доступ разрешен - файл должен быть загружен. Поэтому я не знаю MIME, размер файла и т. Д.

Конечно, я мог бы написать что-то вроде

if ($ext == '.jpg') header('Content-Type: ...');

Но я не хочу использовать это решение, поскольку хочу обрабатывать ВСЕ ВОЗМОЖНЫЕ файлы (png, gif, exe, mp3, zip, ETC). Проблема в том, что я не могу знать все типы пантомимы.

Было бы здорово, если бы я мог вызвать Apache (в подзапросе) для загрузки файла (на этот раз без handler.php).

В моем случае я не хочу защищать ресурсы таким строгим способом, как mod_auth, поскольку я хочу добавить только отказ от ответственности в зрелый контент (нарисованный рисунок, содержащий кровь и не подходящий для детей). Если файл cookie не найден, я хотел бы показать отказ от ответственности, а если файл cookie есть, я могу показать картинку.

1 Ответ

1 голос
/ 19 ноября 2010

Учитывая, что вы хотите заблокировать доступ ко всем ресурсам по указанному пути, мне кажется, что Apache-авторизация - лучшая ставка для вас. Это гораздо более чистое решение, чем проверка сеанса вручную при каждом запросе ресурса, и вы не столкнетесь с проблемами обработки типов контента, которые вы описываете.

REVISED:

В этом случае я предлагаю вам изучить работу с файлами cookie и .htacces .

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_COOKIE} !CookieName= [NC]
RewriteRule .* http://www.example.com/members/login.php [L]
...