Лучшая практика аутентификации php ...? - PullRequest
0 голосов
/ 01 ноября 2011

У меня есть простая страница входа, которая проверяет учетные данные по базе данных, а затем каждая страница включает в себя auth.php, которая проверяет, установлено ли $_SESSION['logged'] и не истек ли сеанс.

Проблема в том, что каждая страница также включает в себя еще одну страницу tab.php (что-то вроде меню), к которой я также должен ограничить доступ, но включение auth.php внутри tab.php делает включение дважды.Если я не включу auth.php в tab.php, то любой может получить доступ к tab.php напрямую, минуя проверку подлинности и, возможно, получить личную информацию.

Есть ли лучший способ разрешить эту ситуацию?

РЕДАКТИРОВАТЬ:

И я забыл спросить, но какой путь вы используете, чтобы сделать его относительно корня сайта?Поскольку auth.php и tab.php находятся в папке, а index.php, который включает в себя tab.php, находится в корне - функция включения выдает ошибку для index.php или tab.php в зависимости от того, какой путь я использую ('./includes/auth.php' ИЛИ './auth.php') - Если вы понимаете, о чем я.Я пробовал /include/auth.php, но это не сработало.

Ответы [ 5 ]

1 голос
/ 01 ноября 2011

Используйте include_once вместо include в ваших файлах (или require_once и require).Это гарантирует, что ваш файл auth.php будет включен только один раз за время существования сценария.

0 голосов
/ 01 ноября 2011

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

Однако я хотел бы добавить свои включения в папку «include» и запретить доступ - людям, которые вводят путь вручную - через файл htaccess. Таким образом, вы можете хранить свои включения в одном месте (как бы ни содержался ваш заголовок) и держать ваши включенные файлы в чистоте и по-прежнему вне досягаемости. Если бы вы сделали это, вам нужно было бы только сделать то, что Ян упомянул в ответе выше, и проверить, установлен ли ваш $_SESSION['logged'] (и любые другие проверки, которые вам нужны)

0 голосов
/ 01 ноября 2011

Попробуйте включить include_once (). Смотри (http://php.net/manual/en/function.include-once.php)

0 голосов
/ 01 ноября 2011

Как насчет использования require_once("auth.php");?Это гарантирует, что файл auth.php включен (в противном случае приложение остановится), но содержит только файл один раз , который, по-видимому, является вашей целью.

0 голосов
/ 01 ноября 2011

Просто проверьте в tab.php, инициализирован ли сеанс и имеет ли значение $ _SESSION ['logged'] значение true. Это будет работать нормально, если сначала загрузится auth.php.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...