Администратор сгенерировал пароль к базе, нажал «Копировать» и переключился в терминал. Следующие полминуты строка живёт сразу в трёх местах: в поле генератора, в системном буфере обмена и в любом поле, куда сейчас может попасть вставка. Обычно проверяют первую половину — ушла ли генерация на сервер. Как во вкладке «Сеть» убедиться, что открытый текст не покинул браузер, разобрано в отдельной заметке. Вторую половину пропускают: после успешного копирования кто ещё может прочитать этот буфер.

Это не обзор, как собрать сильный или читаемый пароль, и не список функций кнопки «Копировать». Вопрос один: когда пароль уже в буфере обмена, какие программы ещё могут его прочитать. Кнопка копирования в MyPassGen вызывает navigator.clipboard.writeText и пишет строку в системный буфер. Встроенного хранилища паролей нет. Закроете вкладку — на сервере этой строки не останется. Буфер обмена всё равно общий для системы. Страницу можно закрыть. Буфер останется. Ниже пути из спецификации, из настроек ОС и из шагов, которые можно повторить самому.

Сначала разведите задачи

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

Скопировали — секрет уже не на странице

Поле на странице генератора принадлежит текущей вкладке. Буфер обмена не принадлежит ни одной вкладке. В MDN Clipboard API описан как асинхронное чтение и запись системного буфера обмена: после успешной записи блокнот, терминал, окно Telegram и сеанс удалённого рабочего стола читают его по своим правилам. HTTPS закрывает только путь от этой страницы к серверу. Он не закрывает буфер на этой машине.

Старый вызов document.execCommand('copy') помечен как устаревший, реализации расходятся. Новые страницы должны писать через navigator.clipboard.writeText. Сама запись обычно не спрашивает «разрешить этой странице читать». Chromium считает clipboard-write правом, которое можно выдать автоматически. Firefox и Safari всё равно ждут недавний жест пользователя — клик или нажатие клавиши, в спецификации это мгновенная активация. Клик по «Копировать» и есть такой жест. Скрипт, который пишет в фоне, в Safari часто падает. Поэтому часть страниц отказывается копировать, пока вы не кликнете. Это не каприз сайта.

В MyPassGen один и тот же writeText пишет сгенерированный пароль, одноразовую ссылку и очищенный результат. Все инструменты открываются без аккаунта. Успешное копирование доказывает только одно: строка попала в системный буфер. Оно не доказывает, кто прочитает её через несколько секунд, и не доказывает, что строки не окажется в истории Win+V. Если считать надпись «Скопировано» концом истории, как раз пропускают следующие пути.

Чтение со страницы: разрешение и вставка

Страница, которая хочет сама прочитать буфер, вызывает navigator.clipboard.readText() или read(). Спецификация требует безопасный контекст — HTTPS или localhost — и хочет, чтобы чтение шло сразу после действия пользователя на странице. Браузеры это реализуют по-разному. Разницу можно увидеть прямо сейчас.

Chromium: разрешение clipboard-read

Chrome, Edge и другие браузеры на Chromium запрашивают clipboard-read из Permissions API, когда у документа есть фокус, но чтение не полностью совпадает со спецификацией. Если нажать «Разрешить», выдача остаётся: скрипты того же источника могут читать снова без нового диалога. В настройках сайта есть пункт «Буфер обмена», его можно отозвать. Вложенный в чужую страницу iframe ещё должен пройти токены Permissions-Policy clipboard-read и clipboard-write. Если родитель их не отдал, вызов у потомка падает. Это видно в инструментах разработчика: «Приложение» → «Разрешения». Это не слоган.

Firefox и Safari: короткое меню «Вставить»

Firefox и Safari не собираются делать это разрешение постоянным. Если чтение вне спецификации, но мгновенная активация ещё жива, они показывают короткое контекстное меню с одним пунктом «Вставить», который становится кликабельным примерно через секунду. Содержимое того же источника иногда проходит без этого шага. Содержимое другого источника обычно нет. Пока вы не нажали этот пункт, скрипт текст не получит. Это не модель Chromium «разрешил один раз — читает потом».

Когда вставляете сами, страница всегда видит текст

Ctrl+V / Cmd+V или пункт «Вставить» в поле порождают событие paste. Обработчик может взять текст из clipboardData. Вы сами отдали его текущей странице. Это не фоновое воровство. Риск в фокусе: поле Telegram, ответ в тикете Usedesk или чужая страница настроек, а пальцы быстрее глаз. Буфер не спрашивает: «вы сейчас вставляете пароль?»

На телефоне есть ещё слой. С iOS 14 приложение, которое читает буфер в фоне, вспыхивает баннером сверху. С iOS 16 приложение, которое читает UIPasteboard напрямую — не через системное меню вставки, сочетание клавиш или UIPasteControl — сначала спрашивает, разрешить ли вставку. Баннер или диалог доказывают, что кто-то прочитал. Они не доказывают, что никто никогда не читал. Тишина значит только то, что в этот раз запрос не сработал или вы уже разрешили.

Не вставляйте свежий пароль на страницу проверки, которая его загружает

Часть сайтов «не утекал ли пароль» отправляет исходник POST-ом. Утечка из буфера — локальный путь. Вставка на сайт, который загружает строку, — второй, исходящий. Разница разобрана в сравнении локального списка утечек и Have I Been Pwned. Локальная проверка качает открытый список слабых паролей; сам пароль остаётся в поле. И генерация, и локальная проверка открываются без аккаунта.

История системы и облачная синхронизация

Разрешение страницы покрывает только скрипты текущей вкладки. Операционная система ведёт свою историю и может синхронизировать её на другие устройства. Ни один из этих путей не проходит через диалог clipboard-read.

В Windows 10 и 11 при включённой истории буфера обмена Win+V показывает недавние копии. Справка Microsoft конкретна: в списке не больше 25 элементов. Незакреплённые записи сбрасываются после перезагрузки. Закреплённые остаются. В параметрах можно включить синхронизацию между устройствами: текст следует за любым компьютером, где выполнен вход в тот же аккаунт Microsoft. Когда пароль попал в эту историю, его открытый текст видит любой, кто сидит за этой машиной, и любой, у кого открыт синхронизированный целевой компьютер. Закрепление — худший случай. Перезагрузка закреплённую запись не снимает. «Очистить всё» закреплённые тоже оставляет.

Универсальный буфер обмена Apple идёт через Handoff. Устройства должны быть рядом, в одном аккаунте Apple, с включёнными Bluetooth и Wi-Fi, и с включённым Handoff (по умолчанию он уже включён). Скопировали на одном — на соседнем можно вставить. Содержимое живёт недолго или до тех пор, пока на любой стороне не скопируют что-то новое. Руководство по безопасности платформы Apple прямолинейнее: приложения могут достать данные буфера ещё до того, как пользователь вставил; при включённом универсальном буфере этот доступ распространяется на другие устройства того же аккаунта iCloud. Канал тот же, что у Handoff: сопряжение BLE 4.2, 256-битный ключ AES, объявления в AES-256-GCM. Это закрывает постороннего на радио. Это не значит «лежащий рядом iPhone, где уже выполнен вход, эту строку не прочитает».

Менеджеры паролей считают буфер коротким окном экспозиции. 1Password по умолчанию очищает скопированный секрет примерно через 90 секунд; в настройках безопасности это можно выключить. Bitwarden предлагает «Очистить буфер обмена» на компьютере, телефоне и в расширении браузера: от примерно 10 секунд до 5 минут или никогда. Страница генератора в браузере обычно не делает этого за вас. MyPassGen после «Копировать» обратный отсчёт не запускает. Перезаписать значит скопировать что-то другое или очистить системную панель самому.

Удалённый стол, расширения и ошибочная вставка

Удалённый рабочий стол, VNC и многие программы для созвонов по умолчанию перенаправляют буфер в обе стороны. Скопировали в удалённом сеансе — локальная машина может вставить. Скопировали локально — дальняя сторона может вставить. Пароль тогда лежит в обоих буферах. Во время демонстрации экрана символы, только что вставленные в терминал, ещё могут попасть в запись созвона или в скриншот. Этот слой — не «загрузила ли страница». Вкладка «Сеть» его не покажет.

Расширение браузера, которое запросило clipboardRead / clipboardWrite — или соответствующие права хоста в Chromium — читает и пишет вне модели разрешений скрипта страницы. Список прав виден в карточке магазина. Установленное «улучшение буфера» или «вставка между устройствами» — ещё один канал синхронизации. Не останавливайтесь на вопросе «загрузил ли генератор». Посмотрите и список расширений.

Самая частая утечка и самая лёгкая в воспроизведении — всё ещё ошибочная вставка: фокус стоит в Telegram, в теле письма или в ответе тикета, палец жмёт вставку. История чата, архив почты и система тикетов держат открытый текст гораздо дольше, чем 90 секунд очистки буфера. Когда коллеге секрет нужен один раз, собирайте одноразовую ссылку: ключ стоит после # в адресе, страница чтения не требует входа. Не копируйте один и тот же открытый текст и в буфер, и в общий чат.

Пять путей утечки рядом

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

Путь Кто читает Как увидеть сейчас
Страница readText() Источник с правом чтения или пунктом «Вставить» Диалог Chromium; пункт «Вставить» в Firefox / Safari
Ваша собственная вставка Страница или приложение в фокусе Открытый текст в поле; событие paste
История ОС / облачная синхронизация Локальный пользователь; синхронизированное устройство Win+V; вставка на другом устройстве Apple
Удалённый стол / созвон Оба сеанса, запись, скриншот Вставляется ли в блокнот на той стороне; запись встречи
Расширения и менеджеры Расширение, заявившее доступ к буферу Страница прав расширения; очищает ли менеджер через N секунд

Генератор, который берёт случайную строку через Web Crypto и не кладёт пароль в тело запроса «Сети», закрывает только путь загрузки. Остальные четыре строки таблицы остаются открытыми. Если менеджер умеет подставить пароль сам, буфер вообще не нужен. Если набирать или копировать всё же приходится, окно экспозиции сжимайте до «вставил — сразу перезаписал».

Проверка на месте

Эти шаги не зависят от обещания бренда. Берите пароль, которым не откроете настоящий аккаунт, — например случайную строку генератора по умолчанию на 16 символов. Не тренируйтесь на живом мастер-пароле.

  1. Откройте генератор, соберите тестовый пароль и скопируйте его. Им не входите. Откройте инструменты разработчика, вкладку «Сеть», включите «Сохранять журнал» и убедитесь, что после копирования в телах запросов и событиях аналитики этой строки нет. Как проверять загрузки — в заметке как на месте проверить, что шифрование в браузере не отправило открытый текст.
  2. Откройте блокнот или любое текстовое поле и вставьте один раз. Убедитесь, что в буфере именно эта строка. Скопируйте один символ x и вставьте снова: должно получиться x. Это и есть перезапись.
  3. В Windows с включённой историей буфера нажмите Win+V. В истории должен быть тестовый пароль. Если уже перезаписали, сверху будет x, а пароль может остаться ниже по списку. Не закрепляйте. Нажмите «Очистить всё» или копируйте бессмысленный текст, пока пароля в списке не станет.
  4. В консоли пустой вкладки выполните navigator.clipboard.readText().then(console.log, console.error). Chromium должен показать запрос на чтение или отказать. Firefox или Safari должны показать пункт «Вставить» или отказать. Не жмите «Разрешить», «чтобы проще отладить». «Разрешить» оставляет источнику постоянное право чтения.
  5. Если второе устройство вошло в тот же аккаунт Apple или Microsoft и синхронизация включена, вставьте там. Если появился тестовый пароль, облачная синхронизация или универсальный буфер уже перенесли открытый текст. Выключите синхронизацию или Handoff — либо подождите таймаут — и повторите.
  6. В списке прав установленных расширений найдите чтение или запись буфера. Если открыт сеанс удалённого стола, один раз вставьте в блокнот на той стороне и посмотрите, включено ли перенаправление.

Генератор MyPassGen построен на этой границе. Случайный режим — от 6 до 128 символов, по умолчанию 16, ниже 8 предупреждение о слабости. Оба режима берут байты через getRandomValues в текущей вкладке. Копирование идёт через writeText. Аккаунта и хранилища паролей нет. Проверять нужно диалог разрешения, Win+V и вставку на другом устройстве — не слово «Скопировано» на странице.

Что сделать сразу после вставки

Для той одной строки, которую сегодня всё же копируете, заканчивайте в таком порядке: убедитесь, что фокус в нужном поле пароля, затем вставьте; сразу скопируйте бессмысленный символ или очистите историю в системной панели; если секрет нужен другому человеку, собирайте одноразовую ссылку и держите ключ после #, а не оставляйте открытый текст в буфере «на всякий случай». Для аккаунтов, которые менеджер умеет заполнить сам, уберите копирование из процесса.

Общий компьютер, демонстрационную машину и прыжковый хост с открытым удалённым столом считайте средой, где буфер читает второй человек. Мастер-пароль туда не копируйте. Если набирать руками всё же нужно, более длинная читаемая фраза снижает число опечаток — после использования её смените. Четыре слова из списка на 100 дают около 27 бит, для мастер-пароля этого мало; сравнение — в заметке про случайный пароль и читаемую фразу.

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

Частые вопросы

HTTPS уже защищает пароль после копирования?

Нет. HTTPS закрывает путь от браузера к серверу. Буфер обмена локальный. Он не едет в этом TLS-сеансе. Загрузка страницей, история ОС, универсальный буфер и ошибочная вставка не смотрят, есть ли замок в адресной строке.

Если нажал «Разрешить» чтение буфера, можно отозвать?

В Chromium да: настройки сайта → разрешения → «Буфер обмена» → «Блокировать». Firefox и Safari обычно не сохраняют это чтение как постоянную выдачу, поэтому следующий раз снова идёт через пункт «Вставить». Не давайте чтение источнику, которому не доверяете, только чтобы кликнуть один раз меньше.

Нужен ли аккаунт, чтобы сгенерировать пароль? Уходит ли копирование на сервер?

Аккаунт не нужен. Генерация и копирование должны остаться в текущей вкладке. Копирование пишет строку в системный буфер. Это не POST на сервер. Откройте «Сеть»: после копирования в теле запроса и в событиях аналитики этого пароля быть не должно. Когда копия нужна коллеге, собирайте одноразовую ссылку. Не считайте буфер каналом передачи.

Автозаполнение менеджера безопаснее копирования?

Для «на один проход через системный буфер меньше» — да. Автозаполнение кладёт пароль в текущую форму и обходит историю Win+V. Если менеджер всё равно предлагает «Копировать», эта копия идёт в тот же буфер, что и со страницы генератора, и её всё равно нужно перезаписать. Если автозаполнение доступно, не копируйте.