Почему после закрытия вкладки одноразовой ссылки ключ после # всё ещё можно вернуть из «Недавно закрытых вкладок»
Закрытие вкладки не означает, что ключ после # покинул этот компьютер. Чтобы снова открыть «страницу, которую вы только что закрыли», браузер записывает полный адрес в историю сессии. Ctrl+Shift+T (на macOS — ⌘+Shift+T) восстанавливает эту запись, фрагмент включён. Ниже отделяем «сервер никогда не видел ключ» от «этот компьютер всё ещё может его вернуть» и даём проверку на месте. Это не инструкция к форме создания одноразовой ссылки.
Сначала — какой слой записывает закрытие вкладки
Статья отвечает только на вопрос, почему после закрытия вкладки одноразовой ссылки ключ после # всё ещё можно вернуть из «Недавно закрытых вкладок». Это не «почему # не попадает в логи сервера» и не форма на странице Burn-Link.
Какой слой записывает закрытие вкладки
Это не «страница закрыта — значит, адрес покинул мир». Браузер сначала запоминает, где вы остановились, чтобы через секунду вернуть вас туда же.
Когда вы открываете https://…/s.html?id=…#…, в адресной строке одновременно два фрагмента: номер шифротекста после вопросительного знака и ключ расшифровки после #. Закрыть такую вкладку легко прочитать как «ключа больше нет на этом компьютере». Браузер делает обратное: чтобы поддерживать «Назад», «Вперёд», восстановление после сбоя и «Недавно закрытые вкладки», ему нужно хранить полный URL этой навигации. В Chromium это называется session history — история сессии: каждая запись навигации сохраняет URL на тот момент, позицию прокрутки и неотправленные данные формы. После закрытия вкладки или перезапуска браузера эти записи сериализуются, чтобы вкладку можно было вернуть в том же виде. См. документ Chromium Session History.
Firefox называет ту же группу функций Session Restore. Он отслеживает окна, вкладки и недавно закрытые вкладки и записывает на диск историю каждой вкладки, прокрутку и формы, чтобы при запуске или «Отменить закрытие» их можно было прочитать обратно. См. Firefox Source Docs: Session Restore. Microsoft Edge построен на Chromium, поэтому восстановление закрытой вкладки идёт тем же путём истории сессии — не по отдельному правилу «сохранить заголовок и выбросить фрагмент».
Этот слой — не HTTP-запрос. IETF в RFC 3986 §3.5 определяет фрагмент как клиентскую идентификацию. Сервер не использует его при обработке URI. Журналы доступа UsePwd поэтому не содержат ключ после #. Эту границу уже разобрали в Почему фрагмент # в URL не попадает в логи сервера. Эта статья закрывает следующий слой: фрагмент, который никогда не входит в запрос, всё равно может попасть в вашу собственную запись браузера. Закрытие вкладки прекращает отображение. Оно не стирает автоматически полный URL, который сидит в истории сессии.
«Сервер не видит ключ» и «этот компьютер всё ещё может его вернуть» могут быть правдой одновременно. Первое — строка запроса в панели Network. Второе — адресная строка после восстановления из «Недавно закрытых вкладок».
Почему «Недавно закрытые вкладки» сохраняют #
Восстановление — не новый поиск сайта. Это переход по URL, который был в адресной строке в момент закрытия.
В Chrome или Edge нажмите Ctrl+Shift+T или откройте История → Недавно закрытые. Браузер берёт эту запись сессии и открывает URL внутри неё. Официальный список сочетаний Chrome называет это «Повторно открыть ранее закрытые вкладки в порядке их закрытия»; см. Сочетания клавиш в Chrome. Список недавно закрытых вкладок Firefox делает то же из Session Store: URL активной записи истории становится целью восстановления. Фрагмент — часть URL, а не украшение рядом с заголовком страницы. При восстановлении нет отдельного шага, который его снимает.
Долгосрочная история и история сессии — тоже разные хранилища. Когда Chromium пишет URL в базу истории, он убирает имя пользователя и пароль. Преобразование не очищает фрагмент. Функция — Chromium GurlToDatabaseUrl. Адрес одноразовой ссылки, где в chrome://history всё ещё виден #, поэтому не противоречит «в запросе не было фрагмента»: база истории хранит полную строку, которую вы посетили; строка запроса по-прежнему только s.html?id={id}.
«Дублировать вкладку» через контекстное меню — более короткий путь. Chromium документирует, что дублирование вкладки — или «Назад», «Вперёд», «Обновить» в новой вкладке — клонирует записи навигации напрямую, без промежуточной записи в файл. Адресная строка клонированной вкладки обычно та же, включая # и ключ. На общем компьютере это быстрее, чем копаться в истории: соседу не нужно уметь искать в истории. Достаточно дублировать вкладку.
Сервер видит s.html?id={id}. Панель Network и журналы доступа не показывают ключ.
«Недавно закрытые вкладки», восстановление после сбоя и «Дублировать вкладку» переиспользуют URL на момент ухода.
База истории убирает имя пользователя и пароль. Она не отвергает URL только потому, что у него есть фрагмент.
Окно инкognito — проверяемое исключение, а не «инкognito значит ключ уже уничтожен». Справка Chrome говорит, что сессия инкognito заканчивается, когда вы закрываете все окна инкognito; см. Режим инкognito. Пока эта сессия открыта, Ctrl+Shift+T часто восстанавливает только что закрытую вкладку, и # всё ещё в адресной строке. Только после закрытия последнего окна инкognito список «Недавно закрытых» этой сессии исчезает вместе с ним. Проверяйте, открыто ли окно, а не то, «выглядит» ли значок приватным.
Куда ещё уходят закладки и синхронизация
«Недавно закрытые вкладки» — только первый локальный ярлык. Закладки и открытые вкладки под тем же аккаунтом могут унести ту же строку на другое устройство.
Когда вы добавляете страницу чтения в закладки, браузер сохраняет строку из адресной строки. Кнопка «звезда» не спрашивает сначала «текст после # — это ключ?» и не хранит только путь. Позже любое устройство с синхронизацией закладок может открыть эту запись и снова показать полную ссылку. Руководство Apple iCloud говорит, что после включения Safari в iCloud закладки и открытые вкладки хранятся в iCloud и остаются актуальными на iPhone, iPad и Mac; закладки синхронизируются и на ПК с iCloud для Windows. См. Синхронизация Safari на всех устройствах с iCloud.
Chrome перечисляет «История и вкладки» как элемент синхронизации, который можно включить. После включения открытые вкладки появляются в История → Вкладки с других устройств. Справка: Закладки, пароли и другие данные на всех устройствах. Путь «Отправить вкладку на устройства» записывает полный spec() GURL в запись синхронизации. Обычный фрагмент # сериализуется вместе с остальной частью URL; его не снимают заранее. Реализация — Chromium SendTabToSelfEntry.
Не путайте системное меню «Поделиться» с закладкой. В Safari на iPad при отправке URL с фрагментом в Mail иногда остаётся только часть до #. Выделить всю адресную строку и скопировать обычно сохраняет фрагмент. Именно в этом смысл: не решайте «ключ исчез», потому что нажали «Поделиться». Смотрите на символы, которые реально появляются в адресной строке получателя — или другого устройства. Превью в чате, которое останавливается на заголовке, — другая статья. Когда полная ссылка уже в закладке или записи синхронизации, это уже не бот превью.
Включение синхронизации не значит, что Google или Apple могут расшифровать шифротекст. Они синхронизируют строку URL, а не открытый текст на сервере UsePwd. Риск — «другое устройство под тем же аккаунтом может открыть эту ссылку», а не «служба синхронизации открыла и прочитала за вас».
Чем «Убрать с этой страницы» отличается от закрытия вкладки
«Убрать с этой страницы» переписывает текущую запись сессии. Кнопка закрытия этого шага не выполняет.
Burn-Link UsePwd кладёт ключ после # в s.html?id={id}#{key}. Создание и чтение открываются сразу — ни одна сторона не регистрируется. Текущая вкладка шифрует или расшифровывает через Web Crypto и AES-256-GCM. Открытый текст — не более 32 КБ. На сервер уходят только шифротекст, срок жизни и число прочтений. Срок — 1 час, 24 часа, 7 дней или «только после прочтения». Прочтений — от 1 до 10, по умолчанию 1. Сервер хранит только шифротекст. Он не видит открытый текст, и нет аккаунта, который мог бы восстановить секрет по пользователю.
Когда получатель открывает страницу чтения, вкладка сначала спрашивает, на месте ли шифротекст. Эта проверка не тратит прочтение. Только после Открыть и посмотреть браузер забирает шифротекст и расшифровывает его локально ключом после #. После успешной расшифровки фрагмент по умолчанию остаётся в адресной строке. Закрытие вкладки или уход со страницы очищает поле с открытым текстом — страница чтения слушает pagehide — но не переписывает адрес. Только Убрать с этой страницы вызывает history.replaceState и сворачивает текущий URL до пути плюс query, убирая # и ключ после него. WHATWG определяет replaceState как замену текущей записи истории сессии, а не добавление новой; см. History API. Закройте вкладку после этого — «Недавно закрытые вкладки» восстановят адрес уже без ключа.
Исчез ли шифротекст на сервере, по-прежнему зависит только от числа прочтений и срока, заданных при создании. «Убрать с этой страницы» не тратит лишнее прочтение и не экономит его. Пока прочтения остались, любой с полной ссылкой всё ещё может нажать Открыть и посмотреть. Когда счётчик исчерпан, полная ссылка открывает только состояние «сожжена» — а адрес может оставаться в истории сессии, закладках и чате. Почему вставка той же ссылки в чат с превью не всегда тратит прочтение — в Почему после вставки одноразовой ссылки в чат с превью число прочтений ещё не обязательно потрачено. Эта статья — про запись браузера получателя, а не про карточку в канале.
Поле с открытым текстом очищается. История сессии может нести #. Восстановление снова показывает ключ в адресной строке.
Открытый текст и фрагмент покидают эту запись истории. Восстановление обычно оставляет только ?id=.
Повторное открытие показывает состояние «сожжена». Адрес на этом компьютере и в чате сам не исчезает.
Как проверить восстановление в этом браузере
Цель — не доказать «все браузеры всегда синхронизируют фрагменты». Цель — понять, остаётся ли ключ в адресной строке после закрытия вкладки в том браузере, которым вы пользуетесь.
-
01
Подготовьте тестовый текст, который никому не передадите по-настоящему
Не вводите рабочий API-ключ или пароль входа. Откройте Burn-Link, введите, например,
ClosedTab-20260911, оставьте прочтения по умолчанию — 1, срок — 24 часа. Страница открывается сразу. Эти шаги проверяют только историю сессии. Это не формальная передача. -
02
Откройте страницу чтения с полной ссылкой — «Открыть и посмотреть» пока не нажимайте
После создания должны быть и
s.html?id=, и#. Откройте в этом браузере. Страница должна остановиться на «Шифротекст ещё на месте». Посмотрите адресную строку и убедитесь, что после#есть ключ. Нажмите F12 и откройте панель Network: должен быть запрос статуса, и URL запроса не должен включать сегмент после#. -
03
Закройте вкладку, затем откройте её из «Недавно закрытых»
Закройте вкладку. В Windows или Linux нажмите Ctrl+Shift+T; на macOS — ⌘+Shift+T. Или История → Недавно закрытые. После восстановления посмотрите адресную строку. Обычный результат:
#и ключ на месте, страница снова на «Шифротекст ещё на месте». Если ключ уже исчез, отметьте, нажали ли вы Убрать с этой страницы или только закрыли вкладку. Это разные действия. -
04
Для второй проверки — закладка или другое устройство под тем же аккаунтом
Добавьте ту же тестовую ссылку в закладки или, в Chrome с включённой синхронизацией «История и вкладки», откройте История → Вкладки с других устройств. Если другое устройство показывает тот же адрес, проверьте, есть ли в полной строке
#— а не только заголовок страницы. Если в Safari включены вкладки iCloud, сделайте то же на другом устройстве под тем же Apple Account. Вы измеряете свой аккаунт и свои браузеры. Не записывайте результат как «все вендоры обязаны синхронизировать фрагменты». -
05
Только потом нажмите «Открыть и посмотреть» и один раз «Убрать с этой страницы»
Нажмите кнопку и убедитесь, что тестовый текст появился. Затем нажмите Убрать с этой страницы и убедитесь, что в адресной строке больше нет
#. Закройте вкладку и восстановите снова. Обычный результат — адрес только с id, без ключа, и страница чтения сообщает «Нет ключа». Так вы отличаете «закрыл вкладку» от «убрал с страницы, затем закрыл». Когда закончите, выбросьте эту ссылку. Не используйте её для настоящего получателя.
Если дальше нужно передать новый ключ другому человеку, не тренируйте «закрыть вкладку, затем восстановить» на настоящем ключе. Держите тестовый текст и реальный секрет отдельно. Настоящая передача по-прежнему через Burn-Link. Риск второго круга после утечки переменных окружения — в После утечки переменных окружения в облаке новый ключ нельзя снова слать в чат. Та статья — «не вставляйте сам API-ключ в историю, по которой можно искать». Эта — «когда полная ссылка уже в истории браузера, закрытия вкладки недостаточно».
Чего возврат ключа не предотвращает
Прочитать «я могу вернуть ключ из „Недавно закрытых вкладок“» как «раз я закрыл вкладку, больше никто не получит ссылку» — значит пропустить несколько границ, которые тоже можно сверить.
Нажать сочетание может тот, кто пользуется этим профилем браузера. Общий ПК, незаблокированный стол или одолженный браузер, из которого не вышли, превращают «Недавно закрытые вкладки» во второй способ достать ссылку. Очистка списка недавно закрытых или истории блокирует этот ярлык. Она не блокирует полный URL, уже скопированный в чат, тикет или скриншот. Burn-Link ограничивает, как долго шифротекст живёт на сервере и сколько раз его можно прочитать. Он не решает, кто ещё видит адрес в локальной записи.
Когда число прочтений исчерпано, открытие ссылки из истории обычно показывает только состояние «сожжена». Это не «история теперь безопасна». Администратор, коллега или вы сами всё ещё можете прочитать из этой строки, что id когда-то существовал и что кто-то использовал фрагмент как ключ. Долгосрочное хранение или синхронизация на несколько устройств — задача отдельного менеджера паролей. У UsePwd нет аккаунтов и хранилища, и потерянную ссылку нельзя восстановить по пользователю. Об этом — на странице О нас.
Файлы — третий путь. Локальная резервная копия одного файла до 5 ГБ идёт через Шифрование файлов, пишет .lock / .enc и по умолчанию не загружает файл. Парольную фразу сгенерируйте в Генераторе паролей длиной от 6 до 128 символов, затем проверьте стойкость в Проверке пароля. Эти страницы, как и эта статья, открываются сразу. Не читайте «фрагмент не попадает в логи сервера» как «закрытие вкладки уничтожает ключ». Логи, история сессии и история чата — разные слои.
Вопросы, которые возникают после закрытия вкладки
Четыре пункта ниже остаются в границах этой статьи. Они не повторяют кнопки на странице создания.
После прочтения — закройте и восстановите тестовую ссылку
Статья объясняет, почему после закрытия вкладки ключ всё ещё может вернуться из «Недавно закрытых вкладок». Чтобы создать тестовую ссылку, которую не используете для настоящей передачи, затем один раз закрыть вкладку, откройте Burn-Link — без регистрации.