2015-02-26 2 views
0

У меня есть небольшая проблема с моим проектом smarty, проблема выхода из системы, чтобы быть точным. У меня есть страница index.php, которая является «главной» страницей, и она получает данные POST и направляет действия на основе текущих данных. Там проверяется, были ли установлены переменные сеанса. Теперь, когда я войти в меня функцию следующим образом: функцияlogout issue в smarty template engine

function login($value) 
{ 


$res = $this->sql->checkLogin($value);   

if($res) 
{ 
    //checks if user is admin 
    $isadm = $this->sql->isAdm($value); 

    if($isadm == true) 
    { 
     $_SESSION['user'] = $value['name']; 
     $_SESSION['adm'] = true; 
     $message = 'Admin'; 
     $this->tpl->assign('var', $message); 
     if($_SESSION['adm'] == true) 
     { 
      //sets some variables for admin users 
      $navigation = 'navi'; 
      $this->tpl->assign('navigation', $navigation); 
     } 
     $this->tpl->display('maint_main.tpl'); 
    } 
    //user is not admin 
    else 
    { 
     $_SESSION['user'] = $value['name']; 
     $_SESSION['adm'] = false; 
     $message = 'Perus'; 
     $this->tpl->assign('var', $message); 
     if($_SESSION['adm'] == true) 
     { 
      $navigation = 'navi'; 
      $this->tpl->assign('navigation', $navigation); 
     } 
     $this->tpl->display('maint_main.tpl'); 
    } 
} 
//login failes, show login form and info 
else 
{ 
    $message = 'Login failed'; 
    $this->tpl->assign('var', $message); 
    $this->tpl->display('login_form.tpl'); 
} 
} 

и выхода из системы:

function logout() 
{ 

setcookie(session_name(), '', time()-42000, '/'); 
session_unset(); 
session_destroy(); 
$this->tpl->display('login_form.tpl'); 


} 

Они работают только о том, как они, как предполагается, но реальная проблема возникает, когда я вхожу, и перенаправлять login_form.tpl. Если я использую кнопку «Назад» браузера, данные POST с именем пользователя и паролем извлекаются, и логин снова проходит. Это приводит к тому, что эти страницы за регистрацией по-прежнему доступны для просмотра. Поскольку я не очень хорошо знаком с Smarty, я не мог понять, как это исправить. Итак, в основном, как предотвратить доступ к данным POST после выхода из системы?

+0

Можете ли вы дать нам полный код данных login_form и logout, чтобы четко понять вашу проблему? – Akilsree1

+0

, или если вы хотите использовать только в php, попробуйте запрограммировать его, используя теги {php} {/ php} – Akilsree1

ответ

1

Я не думаю, что это имеет какое-либо отношение к smarty. Это общая проблема браузера/http. Большинство браузеров будут повторно отправлять данные формы после подтверждения от пользователя.

Один из подходов к тому, чтобы повторные сообщения формы были недействительными, заключались в передаче секретного кода/токена (возможно, указателя или вашего идентификатора сеанса), который также хранится в данных сеанса. Когда пользователь выходит из системы, очистите сеанс (или, по крайней мере, секретный код, который вы проверяете). Когда пользователь входит в систему, убедитесь, что код подтверждения совпадает с кодом для текущего сеанса.

Этот шаблон часто используется для управления атаками csrf и часто известен как «токен синхронизатора». Это сообщение в блоге дает хорошее объяснение. https://blog.whitehatsec.com/tag/synchronizer-token/