Есть ли способ предотвратить рендеринг страницы, когда человек вышел из системы, но нажал кнопку «назад»? - PullRequest
23 голосов
/ 15 сентября 2008

У меня есть веб-сайт, который требует входа в систему и показывает конфиденциальную информацию.

Человек переходит на страницу, получает запрос на вход в систему, а затем получает информацию.

Пользователь выходит из сайта и перенаправляется обратно на страницу входа.

Затем человек может нажать «назад» и вернуться обратно на страницу, где содержится конфиденциальная информация. Поскольку браузер просто воспринимает это как визуализированный HTML, он показывает их без проблем.

Есть ли способ предотвратить отображение этой информации, когда человек нажимает кнопку "назад" на экране выхода из системы? Я не пытаюсь отключить саму кнопку «Назад», я просто пытаюсь предотвратить повторное отображение конфиденциальной информации, потому что человек больше не вошел на сайт.

В качестве аргумента приведенный выше сайт / сценарий представлен в ASP.NET с проверкой подлинности с помощью форм (поэтому, когда пользователь переходит на первую страницу, то есть ту страницу, которую он хочет, он перенаправляется на страницу входа в систему). случай, который имеет значение).

Ответы [ 16 ]

0 голосов
/ 15 сентября 2008

Для полноты:

Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetNoStore();
Response.Cache.SetExpires(DateTime.Now.AddMinutes(-1));
0 голосов
/ 15 сентября 2008

Это немного напрягает, но если у вас был встроенный Java-апплет или флэш-приложение и была выполнена аутентификация, вы могли бы сделать так, чтобы они проходили аутентификацию в «реальном времени» с сервер каждый раз, когда они хотели просмотреть информацию.

Используя это, вы также можете зашифровать любую информацию.

Всегда есть вероятность, что кто-то может просто сохранить страницу с конфиденциальной информацией, поскольку отсутствие кэша не поможет обойти эту ситуацию (но тогда всегда можно сделать снимок экрана приложения flash или java).

0 голосов
/ 15 сентября 2008

Правильный ответ предполагает использование установки заголовка HTTP Cache-Control в ответе. Если вы хотите убедиться, что они никогда не кэшируют вывод, вы можете сделать Cache-Control: no-cache. Это часто используется в координации с магазином.

Другие опции, если вы хотите ограниченное кэширование, включают установку времени истечения и повторную проверку, но все они могут привести к повторному отображению кэшированной страницы.

См. http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.4

0 голосов
/ 15 сентября 2008

Я не знаю, как это сделать в ASP.NET, но в PHP я бы сделал что-то вроде:

header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Cache-Control: no-cache");
header("Pragma: no-cache");

Что заставляет браузер перепроверить этот элемент, поэтому ваша проверка подлинности должна быть запущена, отказывая пользователю в доступе.

0 голосов
/ 15 сентября 2008

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

0 голосов
/ 15 сентября 2008

Вы ищете директиву без кэширования:

<META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE">

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

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

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