Ограничьте доступ содержания к, вошел в систему пользователи с PHP

У меня есть установка ЛАМПЫ, и я просто хочу смочь защитить содержание на веб-странице (изображения, CSS, видео, и т.д.) так, чтобы только вошел в систему, пользователи могут получить доступ к нему.

Я понимаю, что могу сделать это легко с .htaccess. Однако я не хочу использовать всплывающее окно аутентификации, и я хочу смочь использовать сессии и также смочь выйти из системы.

Я использую php, чтобы сделать задание аутентификации с mysql и создать сессии. Это работает отлично. Но изображения, CSS, JavaScript и т.д. все еще доступен.

Как я предоставляю доступ к содержанию, только если допустимая php сессия существует?

Я столкнулся с использованием mod_rewrite для передачи файлов в php файл (как auth.php? файл =...), и делают сессию, проверяющую там. Это кажется неэффективным для проверки сессии на каждое изображение на странице, которая была уже проверена. Это походит на взлом, и я продолжаю думать, что существует более чистый способ сделать это.

Существует ли модификация для апача как mod_session_cookie, который мог проверить, существует ли cookie с сеансовым ключом в моей базе данных сессии и раз так устанавливает, Позволяют от всех для каталога?

С другой стороны, действительно ли возможно использовать mod_auth_mysql, но также и смочь использовать сессии и вход в систему с помощью формы php, а не аутентификация раскрываются?

Править:

Вот мое решение проблемы:

В моем апачском конфигурационном файле (не .htaccess) я добавил:

RewriteLock /var/www/lib/rewrite.lock


    #...
    RewriteEngine on
    RewriteMap sessionValid prg:/var/www/lib/allow.php

    
            RewriteEngine on

            RewriteCond %{HTTP_COOKIE} !client-cookie=([^;]+)
            RewriteRule .* - [L,R=403]

            RewriteCond %{HTTP_COOKIE} client-cookie=([^;]+)
            RewriteCond ${sessionValid:%1} !valid
            RewriteRule .* - [L,R=403]
    

И сценарий allow.php:

#!/usr/bin/php5
 0)
    echo("valid\n");
  else
    echo("0\n");
}

mysql_close($db);
?>

Это работает как очарование. Используя это и session_set_save_handler я смог использовать php сессии, поддержанные mysql для обеспечения и php страниц и всего содержания в. Я надеюсь, что кто-то находит это полезным.

Некоторые протесты:

  • Оператор RewriteMap должен быть определен в виртуальном блоке хоста, если Вы собираетесь использовать его в том виртуальном хосте. Размещение его за пределами блока не будет работать.
  • Вы, должно быть, установили RewriteEngine на прежде, чем определить RewriteMap, или он будет проигнорирован.
  • RewriteLock не может быть в виртуальном блоке хоста.
  • Как с любым сценарием оболочки, php файл должен быть исполняемым файлом апачским пользователем и лишенный ^M
  • Операторы RewriteMap не могут быть помещены в .htaccess, но другие операторы, которые используют карту, может.

6
задан 3 revs 12 February 2010 в 10:53
поделиться

3 ответа

RewriteCond %{HTTP_COOKIE} !mysessioncookie=([^;]+)
RewriteRule .+\.(jpg|css|js) forbidden.html [R=403]
5
ответ дан 17 December 2019 в 04:46
поделиться

На самом деле я не использую Apache; я использую lighttpd, который включает в себя плагин, который можно использовать для ограничения доступа к папке на основе того, передан ли правильный хэш в URI. По сути, логика вашего приложения и веб-сервер обмениваются секретной солью, которая затем используется для генерации хэша с текущим временем, которое также передается вместе с хэшем. Если время находится в пределах последних 5 минут, то доступ предоставляется. Если нет, или если хэш недействителен, то доступ не предоставляется. Сейчас я гуглю, чтобы узнать, есть ли подобный плагин для Apache.

Edit: mod_auth_token, похоже, делает то же самое для Apache.

0
ответ дан 17 December 2019 в 04:46
поделиться

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

Например, ссылка на 'images / bob.jpg' на самом деле не будет указывать на ресурс, но сценарий, который проверяет логин и в случае успеха отправляет заголовки image / jpeg с правильными данными.

0
ответ дан 17 December 2019 в 04:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: