Я задавал этот вопрос раньше здесь , но пользователь CheekySoft указал, что я "спрашиваю, как реализовать мое предлагаемое решение ", где вместо этого я должен просто "изложить мою проблему и попросить идеи решения ".Итак, пошли.
На сервере Linux у меня есть файлы, настроенные так:
/home
├── user1
│ ├── [-rwx------] index.html
│ └── [-rwx------] index.php
└── user2
├── [-rwx------] index.html
└── [-rwx------] index.php
Если у меня виртуальные хосты Apache настроены на
<Directory /home/user1>`
<Directory /home/user2>
Тогда[любой] пользователь может перейти на www.example.com/user1/index.html
или www.example.com/user2/index.html
.Однако разрешения для этих файлов 0700
, поэтому они недоступны через Интернет.Именно по этой причине я использую suPHP.
В качестве аргумента, скажем, index.php
имеет только следующее
index.php:
<?php
echo file_get_contents('index.html');
exit();
?>
Теперь, с настройкой suPHP, user1 может перейти к www.example.com/user1/index.php
для просмотра index.html
.Аналогично, user2 может перейти к www.example.com/user2/index.php
для просмотра index.html
.Тем не менее, user1 может также перейти на www.example.com/user2/index.php
для просмотра страницы index.html
пользователя user2 и наоборот для user2.
Естественным способом справиться с этим является сессия PHP.Все запросы к странице перенаправляются на главную страницу (т. Е. www.facebook.com
), пользователь проверяется по базе данных, а затем перенаправляется на правильную страницу (см. Изображение ниже).
Пользователи будут переходить на страницу (т. Е. www.example.com/page1.html
), а затем будет часть страницы 1 с жестким кодом , чтобы обеспечить существование действительного сеанса.Если он существует, страница загружается.Если он не существует, пользователь перенаправляется, в данном случае, index.html
.После того, как они войдут в систему и установят действительный сеанс, они будут перенаправлены обратно на исходную страницу.Мы можем изменить index.php
, чтобы выполнить это:
indexValidate.php:
<?php
//this is purely pseudo code, I can't guarantee it will work
session_start();
require_once 'Session_Validator.php';
$sv = new Session_Validator();
$sv->validate($un, $pwd);
echo file_get_contents('index.html');
exit();
?>
Однако, в моем дизайне эти страницы (page1.html
, page2.html
...) находятся в собственном каталоге пользователей (index.html
, index.php
), поэтому сервер не может требовать, чтобы у них была эта жестко закодированная секция, проверяющая правильность секции.Пользователь может просто отредактировать файл, чтобы удалить этот раздел.Конечно, это было бы глупо со стороны пользователя, но я не хочу, чтобы пользователю приходилось изменять каждый из своих файлов, чтобы раздел проверки сеанса находился вверху.Я хочу, чтобы это было без проблем.
Несколько замечаний:
- Я могу использовать Apache для перенаправления всех запросов на один
validateUser.php
скрипт, который затем проверяет пользователя, если он действителен,вызывает исходный запрошенный скриптТем не менее, это имеет побочный эффект, что suPHP уже переключился на пользователя, скорее всего var-www
- Я не хочу использовать Проверка подлинности через Apache
Может кто-нибудь предложить решение моей проблемы?