Предотвращение «фиксации сеанса» атаки мешают мне запускать более одного ajax-запроса

Ситуация:

Всякий раз, когда пользователь входит в мою панель — я генерирую:

  1. secret сессия с секретным токеном, сгенерированным случайным образом.
  2. Хеш текущего пользователя ip + cookie session id + и это secret соединены вместе.
  3. Всякий раз, когда пользователь переходит на новую страницу — я беру его текущую ip + cookie session id + secret это сохраняется в сеансе, и проверьте, если я хэширую их вместе — я получаю предыдущий результат.
  4. Если я не получаю те же результаты: пользователь отправляется в метод выхода из системы, который очищает все его данные сеанса.
  5. Если я получаю тот же результат — я регенерирую пользователей secret меняй его cookie session id и сделать все это снова. Так что в основном это происходит при каждом обновлении / навигации по страницам. (и, конечно, перенаправить пользователя на новую страницу).

Проблема:

Всякий раз, когда я загружаю страницу, страница загружается правильно, если я отправляю ajax-запрос, я получаю ответ, но этот запрос устанавливает новые переменные (что я думаю, это проблема сейчас). Поэтому, если я нахожусь на той же странице и выполняю другой запрос ajax, я получаю ошибку 302 в журнале «Сеть» и перенаправление на страницу входа (которая очищает все мои данные сеанса).

Как я могу заставить это работать должным образом, не нарушая безопасность фиксации сеанса?

Этот метод вызывается для каждой конструкции (Controller.class.php):

/**
*
*  Check if a user is logged in
*
*/
protected function is_loggedin()
{
# Flag for final result:
$flag = false;

# init user obj
$this->system_user = new System_user();

# Check if user is logged in
if ($this->system_user->check_logged_in()) {

# Check if the user is timed-out
if (!$this->system_user->check_timeout()){

# If system user exists
// if ( $this->system_user->find(intval(Session::get(Config::$session_name))) ){

# Re-generate users secret stuff
$this->system_user->generate_security_sessions();
$flag = true;
// }
}
}

# To return true "it" must pass all "if"s
if ( $flag )
# Return System_user object
return $this->system_user;
else
return false;
}

И это тот случай, когда я называю это примером (Users.contoller.php):

<?php
/**
*
* Dashboard Controller: Main user display
*
*/
class Users extends Controller
{


/**
*
*  Constructor
*
*/
public function __construct()
{
# Check if system user is logged in / still logged in / Validate tokens
$this->system_user = $this->is_loggedin();

# Redirect to login if user not logged in
if (!$this->system_user){
Redirect::to('login');
}
}

пс: system user не является user в этом случае. (system user зарегистрированный пользователь, user пользователь, которого системный пользователь может редактировать [например]).
PS2: Регенерация secret и cookie session id для дополнительной безопасности в случаях, когда хакер подделывает сеанс клиента после входа в систему.

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]