Как защитить каталог в Apache с помощью сессии PHP

Процесс ожидает на некотором системном ресурсе, возможно, NFS? это не позволяет этому 'отпускать'. Хотел бы услышать некоторые решения этого вне моего...

перезагрузите поле или позвольте процессу сидеть без дела.

Интересно, смогли ли Вы 'ОСТАНАВЛИВАТЬ' процесс через уничтожение - ОСТАНОВКА {PID}, чтобы препятствовать тому, чтобы он использовал больше CPU.

Перезапуск его должен быть возможным даже с другим остановленным заседанием процесса, но это может потребовать порта списка или сегмента общей памяти, который все еще используется другим процессом.

8
задан 24 March 2010 в 04:14
5 ответов

Если Вы не изменили настройки, данные сессии PHP хранятся в изменении, самостоятельно сериализируют () формат во временном каталоге, и не легко достигнуть это, не используя сам PHP.

unfortuantly, Вы, кажется, хотите скорость статических подаваемых файлов, динамично авторизовывая каждый запрос, которые не являются действительно совместимыми целями. Вы могли бы comprimise при наличии сверхлегкого Сценария PHP, к которому Вы затем используете mod_rewrite для перезаписи запросов в файлы в нем, который передает, хотя вещи, которые прекрасны. Супер простой пример:

.htaccess:

 RewriteEngine On
 RewriteMap auth prg:auth.php
 RewriteRule (.*) ${auth:$1}

auth.php:

#!/usr/bin/php
 <?PHP
 set_time_limit(0); # This program needs to run forever. 
 $stdin = fopen("php://stdin","r"); # Keeps reading from standard in
 while (true) {
        $line = trim(fgets($stdin));
        if (isset($_SESSION['USER_LOGGED_IN'])) {
                echo $line\n";
        } else {
                echo "authfailed.html\n";
        }
 }

особенно, тот Сценарий PHP работает навсегда, таким образом, необходимо будет перезапустить апача при изменении его я думаю.

Это все не тестируется, но это - примерно направление, я думаю, что необходимо было бы войти.

Ссылки:

5
ответ дан 2 December 2019 в 23:02
  • 1
    Мне нравится этот подход, но я задаюсь вопросом, имеет ли сценарий RewriteMap доступ к чему-нибудь кроме stdin? Это имеет контекст cookie и т.д.? –  Cogsy 25 March 2010 в 08:27
  • 2
    На самом деле, да, у Вас действительно есть точка. Можно отправить в значении cookie с помощью mod_rewrite' s environement синтаксис переменных (Таким образом, я думаю, синтаксис стал бы чем-то как $ {автор: $COOKIES за 1$} и you' d должны разделить строку stdin аргументами этим методом, Вы могли взять содержание сессии. –  Aquarion 25 March 2010 в 18:04

Если у Вас был конкретный cookie, можно ожидать, то можно протестировать на его отсутствие с mod_rewrite и дать Запрещенные 403.

RewriteCond %{HTTP_COOKIE} !LoggedIn=true
RewriteRule .* - [F,L]

Но, если бы кто-либо знал, что им был нужен набор cookie с "LoggedIn=true", то затем они могли легко обойти Вашу "защиту".

Сессия PHP характерна для PHP. Apache не имеет никакого способа использовать любую информацию на сессии PHP. У Вас должен был бы быть некоторый модуль аутентификации специально для выполнения проверки сессии.

Что я видел, что большинство людей сделать, имеют дескриптор Сценария PHP обслуживание статического содержания, в котором это получает запрос, проверяет сессию, читает в файле и отсылает содержание с соответствующей информацией о MIME.

1
ответ дан 2 December 2019 в 23:02

Да Основному Автору, если Вы используете mod_php. http://php.net/manual/en/features.http-auth.php

0
ответ дан 2 December 2019 в 23:02
  • 1
    Аутентификация уже использует Сессии PHP. I' m, действительно ища способ использовать сеансовые куки. –  Cogsy 24 March 2010 в 05:13

The conventional solution for that problem is to redirect every call on that folder to a php file, which checks the user permissions, and after that it reads the file, and send it to the output stream or redirects the user to the "no permission" site. For example...

Another tricky way to protect you files is to generate a token from the session_id, and a static salt (and optianally from the static file path), and check it by the file accessing. So you have to regenerate that token in you htaccess file. I don't know whether it's possible only with .htaccess, or you have to use php for that. I found a similar solution here. I'm 99% convinced, that the md5 is not a built in mod rewrite feature.

1
ответ дан 2 December 2019 в 23:02

Мой план по решению этой проблемы теперь заключается в

  1. Перенаправлении запроса на PHP

    RewriteEngine on
    RewriteRule ([0-9a-z-_]+)$ authenticateUser.php?&file=$1 [L]
    
  2. Аутентификация пользователя в PHP (все остальные методы аутентификации, возможно, слишком слабые или требуют записи в файлы постоянно)

    if ( User::hasPermission() && isSane( $filePath ) ) {
     // 
     header( 'X-Sendfile: ' . $filePath );
    }
    
  3. Используйте mod_xsendfile (docs, github)

1
ответ дан 2 December 2019 в 23:02

Теги

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