У меня есть установка ЛАМПЫ, и я просто хочу смочь защитить содержание на веб-странице (изображения, 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 страниц и всего содержания в. Я надеюсь, что кто-то находит это полезным.
Некоторые протесты:
RewriteCond %{HTTP_COOKIE} !mysessioncookie=([^;]+)
RewriteRule .+\.(jpg|css|js) forbidden.html [R=403]
На самом деле я не использую Apache; я использую lighttpd, который включает в себя плагин, который можно использовать для ограничения доступа к папке на основе того, передан ли правильный хэш в URI. По сути, логика вашего приложения и веб-сервер обмениваются секретной солью, которая затем используется для генерации хэша с текущим временем, которое также передается вместе с хэшем. Если время находится в пределах последних 5 минут, то доступ предоставляется. Если нет, или если хэш недействителен, то доступ не предоставляется. Сейчас я гуглю, чтобы узнать, есть ли подобный плагин для Apache.
Edit: mod_auth_token, похоже, делает то же самое для Apache.
Вместо того, чтобы напрямую связываться с ресурсами, используйте некоторую форму контроллера для обслуживания изображений.
Например, ссылка на 'images / bob.jpg' на самом деле не будет указывать на ресурс, но сценарий, который проверяет логин и в случае успеха отправляет заголовки image / jpeg с правильными данными.