Есть ли способ удержать страницу от рендеринга, когда человек вышел из системы, но нажал кнопку "назад"?

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

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

Человек выходит из системы и перенаправляется обратно на страницу входа.

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

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

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

24
15 сент. '08 в 18:41
источник поделиться
16 ответов

Короткий ответ заключается в том, что это невозможно сделать безопасно.

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

Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetExpires(Now.AddSeconds(-1));
Response.Cache.SetNoStore();
Response.AppendHeader("Pragma", "no-cache");

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

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

13
18 сент. '08 в 1:48
источник

Связанные вопросы


Похожие вопросы

Кэш и история независимы и не должны влиять друг на друга.

Единственным исключением созданным для банков, является то, что комбинация HTTPS и Cache-Control: must-revalidate принудительно обновляется при навигации по истории.

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

Вы можете взломать его, используя Javascript, который проверяет document.cookie и перенаправляет, когда установлен куки файл "killer", но я предполагаю, что это может серьезно ошибиться, если браузер не устанавливает/очищает файлы cookie точно так, как ожидалось.

9
20 окт. '08 в 1:57
источник

От aspdev.org:

Добавьте следующую строку поверх обработчика событий Page_Load, и ваша страница ASP.NET не будет кэшироваться в браузерах пользователей:

Response.Cache.SetCacheability(HttpCacheability.NoCache)

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

3
15 сент. '08 в 18:44
источник

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

1
15 сент. '08 в 19:14
источник

Элементы DannySmurf, < meta чрезвычайно ненадежны, когда дело доходит до управления кешированием, а Pragma, в частности, тем более. Ссылка.

1
15 сент. '08 в 19:10
источник

У вас может быть функция javascript, которая выполняет быструю проверку сервера (ajax), и если пользователь не войдет в систему, удаляет текущую страницу и заменяет ее сообщением. Очевидно, это будет уязвимым для пользователя, у которого javascript отключен, но это довольно редко. С другой стороны, это агроничность как браузера, так и серверной технологии (asp/php и т.д.).

1
20 апр. '09 в 18:53
источник

Для полноты:

Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetNoStore();
Response.Cache.SetExpires(DateTime.Now.AddMinutes(-1));
0
15 сент. '08 в 18:59
источник

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

0
06 янв. '09 в 19:17
источник

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

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

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

0
15 сент. '08 в 18:45
источник

Хорошо, что в крупной бразильской банковской корпорации (Banco do Brasil), которая известна тем, что имеет одно из самых безопасных и эффективных программ для домашнего банковского дела в мире, они просто ставят history.go(1) на каждой странице. Итак, если вы нажмете кнопку "Назад", вы вернетесь. Простой.

0
15 сент. '08 в 21:13
источник

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

0
15 сент. '08 в 18:44
источник

Пожалуйста, просмотрите заголовки ответов HTTP. Большинство ASP-кода, которые публикуют люди, похоже, настраивают их. Будьте уверены.

бурундук из O'Reilly - это библия HTTP, а HTTP-книга Криса Шифлетта также хороша.

0
20 сент. '08 в 9:00
источник

Вы ищете директиву no-cache:

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

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

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

0
15 сент. '08 в 18:44
источник

У меня был только банковский пример.

На странице моего банка есть это:

<meta http-equiv="expires" content="0" />

Это должно быть об этом, я полагаю.

0
20 апр. '09 в 12:48
источник

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

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

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

0
15 сент. '08 в 18:45
источник

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

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

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

0
15 сент. '08 в 18:55
источник

Посмотрите другие вопросы по меткам или Задайте вопрос