PHP Есть ли лучший способ защитить мои страницы, чем использовать заголовок (местоположение)? - PullRequest
1 голос
/ 31 августа 2010

Я защищаю свои страницы, проверяя значения моих сеансов.Есть ли более безопасный способ защиты моих страниц, кроме изменения местоположения заголовка, если сеансы недействительны ???Я все делаю правильно ???

В верхней части каждой страницы есть следующее:

<?php
     session_start();

     //VERIFY LOGIN
     $validkey = 'br1ll1ant)=&';

     if ($_SESSION['valid'] != (hash('sha256',$validkey)) && $_SESSION['tokenconfirm'] != hash('sha256',$_SESSION['tokenID']))  {

            header("location:/login/");

         };

?>

Ответы [ 4 ]

7 голосов
/ 31 августа 2010

с использованием header() - это нормально, но не забудьте exit(); ваш сценарий после вызова header().Пользовательские агенты не должны уважать заголовки, поэтому можно написать клиент, который будет просто читать часть, которая идет после вызова заголовка.

if(!session_is_valid()) {
  header('Location: index.php');
  exit;
}
2 голосов
/ 31 августа 2010

Вы используете систему шаблонов? Если да, то вы просто выводите форму входа вместо содержимого страницы, если пользователь не подтвержден. Даже если вы не используете его, вы можете изменить вывод (например, другой набор включений), если пользователь недействителен. Таким образом, вы не полагаетесь на браузер конечного пользователя для защиты содержимого.

0 голосов
/ 31 августа 2010

Используя шаблон фронт-контроллера, вы можете поместить все ваши php-файлы за пределы веб-корня.Таким образом, они не доступны напрямую через URL.Это довольно распространенная практика в PHP-фреймворках, включая те, что построены на Zend 'Framework'.

Если ваши файлы находятся в веб-корне, вы можете использовать другой метод - использовать константы.Вот как CodeIgniter делает это.Определите константу в вашем фронт-контроллере и, если она не определена, отправьте их в корневой веб-каталог.Вот как CI использует константы.

Константа, используемая везде

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');

Как она определена.

define('BASEPATH', $system_folder.'/');

$ system_folder несколько строк выше

$system_folder = realpath(dirname(__FILE__)).'/'.$system_folder;
0 голосов
/ 31 августа 2010

Заголовки должны быть в порядке, я не видел, чтобы люди использовали что-то еще.

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

Используя шаблон MVC, лучше проверить состояние входа в систему еще до того, как они попадут на страницу, и либо перенаправить, если пользователь не вошел в систему, либо загрузить представление входа в систему.

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