Если я дважды быстро нажму кнопку «Назад» в браузере, пользователь выйдет из нашего приложения Cake - PullRequest
0 голосов
/ 20 апреля 2011

Это странная ошибка, и я даже не уверен, как начать выяснять, что происходит.

Мы используем Cake 1.3.8 с нашими сессиями в базе данных. Я не использую ACL или любой другой контроль доступа. Если мы перейдем в приложение и немного нажмем вокруг, а затем быстро дважды нажмем кнопку браузера назад (я пробовал в Firefox и Chrome), пользователь выходит из системы чаще, чем не получает сообщение об ошибке «Вы не авторизованы». чтобы получить доступ к этому месту ".

Пока что во всех моих поисках участвовали люди, желающие сделать страницу недоступной, если пользователь вышел из системы, а затем использовал кнопку "Назад". Я не вижу ничего сообщенного в отношении проблемы, которую вижу.

Кто-нибудь знает, если это проблема с Cake или есть какие-то мысли по устранению неполадок?

Обновление: я нашел, где проблема. У меня установлена ​​высокая безопасность, потому что нам нужно закрывать сеанс всякий раз, когда кто-то закрывает браузер. У меня также очень большой тайм-аут, потому что мы делаем большие двоичные загрузки на S3 и не хотим, чтобы пользователь выходил из системы во время загрузки или выгрузки. Конкретный блок кода в cake_sessions.php, вызывающий проблему:

$time = $this->read('Config.time');
                $this->write('Config.time', $this->sessionTime);
                if (Configure::read('Security.level') === 'high') {
                    $check = $this->read('Config.timeout');

                    $check -= 1;
                    $this->write('Config.timeout', $check);

                    if (time() > ($time - (Security::inactiveMins() * Configure::read('Session.timeout')) + 2) || $check < 1) {

                        $this->renew();
                        $this->write('Config.timeout', 10);
                    }
                }
                $this->valid = true;

Ответы [ 3 ]

1 голос
/ 20 апреля 2011

Возможно, сессия удалена, и, прежде чем ее можно будет записать снова, нажимается кнопка «Назад», удаляющая аутентификацию из переменных сеанса.

Загрузка страницы -> Нажатие кнопки «Назад» -> сеансы удаляются (но до перезаписи сеанса) -> Щелчки кнопки «Назад» -> Сеанс проверяет отсутствие существующего сеанса.

1 голос
/ 21 апреля 2011

Я полагаю, это потому, что идентификаторы сеанса регенерируются между запросами, когда безопасность = высокая. Источник:

http://book.cakephp.org/compare/44/CakePHP-Core-Configuration-Variables/cakephp/cakephp1x

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

Я бы подумал об использовании средней безопасности, установке довольно короткого времени ожидания сеанса и использовании сценария AJAX для обновления сеанса через регулярные промежутки времени (например, каждые 60 с). Таким образом, пользователь быстро выйдет из системы, если будет закрыта вкладка / окно.

Если безопасность является приоритетом, я бы посоветовал взломать ядро, чтобы убедиться, что для файлов cookie сеанса установлено значение http_only, чтобы помочь предотвратить перехват сеанса с помощью XSS-атак. Cakephp 1.x поддерживает PHP4, поэтому, вероятно, не устанавливает его по умолчанию.

http://php.net/manual/en/function.setcookie.php

0 голосов
/ 20 апреля 2011

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

Вы уверены, что человек действительно вышел из системы, или это просто выдаваемая ошибка?

Не видя никакого кода, онбудет трудно прибить его дальше.

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