ワンタイムリンクのタブを閉じたあと、# 以降の鍵が「最近閉じたタブ」から戻ってくる理由
タブを閉じたことと、アドレスバーの # 以降の鍵がこのパソコンから消えたことは同じではありません。ブラウザは「いま閉じたページをもう一度開く」ために、当時の完全な URL をセッション履歴へ書き残します。Ctrl+Shift+T(macOS では ⌘+Shift+T)が戻すのは、その一行です。fragment も一緒に戻ります。以下では「サーバーは鍵を見ていない」と「この端末は鍵をまた出せる」を分け、いまのブラウザで照合できる手順を書きます。ワンタイムリンク作成ページの操作説明ではありません。
先に、閉じる操作が書く層を分ける
本記事が答えるのは「ワンタイムリンクのタブを閉じたあと、# 以降の鍵が最近閉じたタブから戻ってくる理由」だけです。「# がサーバーログに入らない理由」の層でも、ワンタイムリンクのフォーム説明でもありません。
タブを閉じると、どの層に書き込まれるか
「ページを閉じたから、アドレスは世界から消えた」ではありません。ブラウザは、いま止まっていた場所を先に覚えてから、次の一秒でもう一度開けます。
https://…/s.html?id=…#… を開いた時点で、アドレスバーには二段が同時にあります。クエスチョン後ろの暗号文番号と、# 以降の復号鍵です。このタブを閉じると、「鍵はもうこのパソコンにない」と読みたくなります。ブラウザがしている仕事は、その逆です。戻る、進む、クラッシュ後の復元、「最近閉じたタブ」を支えるため、その回のナビゲーションの完全な URL を残さねばなりません。Chromium は、タブごとのこの記録をセッション履歴(session history)と呼びます。1件のナビゲーション項目には、当時の URL、スクロール位置、未送信のフォームなどが入ります。タブを閉じたあと、あるいはブラウザを再起動したあと、これらの項目は直列化され、タブを当時のまま戻すために使われます。説明は Chromium の Session History にあります。
Firefox は同じ系統の機能を Session Restore(セッション復元)と呼びます。ウィンドウ、タブ、最近閉じたタブを追跡し、各タブの履歴、スクロール位置、フォームをディスクへ書いて、起動時や「閉じたタブを元に戻す」で読み戻します。説明は Firefox Source Docs の Session Restore です。Microsoft Edge は Chromium ベースなので、閉じたタブの復元も同じセッション履歴の経路を使います。「タイトルだけ残して fragment は捨てる」という別ルールはありません。
この層は HTTP リクエストではありません。IETF の RFC 3986 §3.5 は fragment をクライアント側の識別とし、サーバーが URI を処理する材料にはしません。だから UsePwd のアクセスログに # 以降の鍵は出ません。その境界はURL の # fragment がサーバーログに出ない理由で分解済みです。本記事が補うのは次の層です。リクエストに入らない fragment でも、自分のブラウザ記録には入ります。タブを閉じるのは、今回の描画を終えることです。セッション履歴にある完全な URL を、自動では消しません。
「サーバーは鍵を見ていない」と「このパソコンは鍵をまた出せる」は、同時に成り立ちます。前者はネットワークパネルのリクエスト行、後者は「最近閉じたタブ」で戻したあとのアドレスバーです。
最近閉じたタブが # を連れて戻る理由
復元は、検索エンジンでもう一度そのサイトを探すことではありません。閉じる直前の URL を、もう一度開くことです。
Chrome や Edge で Ctrl+Shift+T を押すか、メニューの「履歴 → 最近閉じたタブ」を開くと、ブラウザはいまのセッション記録を取り出し、そこに保存された URL を開きます。Chrome 公式のショートカット一覧は、これを「閉じたタブを閉じた順序で再び開く」と書いています。説明は Chrome のキーボード ショートカット です。Firefox の「最近閉じたタブ」も Session Store から1件選び、当時アクティブだった履歴項目の URL を開き直します。fragment は URL の一部であり、ページタイトルの脇にある飾りではありません。復元に、それを剥がす別手順はありません。
長期の閲覧履歴とセッション履歴も、同じ倉庫ではありません。Chromium が URL を履歴データベースへ書くとき、ユーザー名とパスワードは取り除きます。この変換は fragment を消しません。関数は Chromium の GurlToDatabaseUrl です。したがって chrome://history に # 付きのワンタイムリンクが出ても、「リクエストに fragment はなかった」こととは矛盾しません。履歴庫が覚えるのは、あなたが見た完全な文字列です。リクエスト行は、それでも s.html?id={番号} までです。
右クリックの「タブを複製」は、もっと短い近道です。Chromium は、タブの複製、あるいは新しいタブでの戻る・進む・再読み込みが、ナビゲーション項目を直接クローンすると書いています。いったんファイルへ書いて読み戻すのではありません。複製したタブのアドレスバーは、閉じる前と同じ文字列であることが多く、# と鍵も残ります。共有パソコンでは、履歴ページを探すより速いです。隣の人は履歴の探し方を知らなくても、タブを複製すれば同じリンクを取れます。
サーバーへ届くのは s.html?id=番号 です。ネットワークパネルとアクセスログに鍵は出ません。
最近閉じたタブ、クラッシュ復元、タブの複製が使うのは、閉じる直前の URL です。
履歴庫はユーザー名とパスワードを落とします。fragment があるという理由だけでは拒否しません。
シークレットモードは、その場で照合できる例外です。ただし「シークレットなら鍵はすでに消えた」とは読みません。Chrome のヘルプは、シークレットのセッションが終わるのはすべてのシークレット ウィンドウを閉じたときだと書いています。説明は シークレット モードでブラウジングする です。そのセッションがまだ開いているあいだは、Ctrl+Shift+T で閉じた直後のタブが戻ることが多く、アドレスバーの # も残ります。最後のシークレット ウィンドウまで閉じたあと、そのセッションの「最近閉じたタブ」は一緒に消えます。見るべきは「ウィンドウがまだあるか」であり、「アイコンがシークレットかどうか」ではありません。
ブックマークと同期は、どこまで運ぶか
「最近閉じたタブ」は、この端末の最初の近道にすぎません。同じアカウントのブックマークと開いているタブは、同じ文字列を別の端末へ運べます。
閲覧ページをブックマークすると、ブラウザが保存するのは、その瞬間のアドレスバーの文字列です。星マークは先に「# 以降は鍵か」と尋ねて、パスだけを残すことはしません。あとからブックマーク同期がオンのどの端末で開いても、アドレスバーにはまた完全なリンクが出ます。Apple は、Safari 向けに iCloud をオンにすると、ブックマークと開いているタブが iCloud に保存され、iPhone、iPad、Mac のあいだで更新されると書いています。ブックマークは、Windows 版 iCloud を入れたパソコンにも同期されます。説明は Apple「iCloud で Safari をデバイス間で同期する」 です。
Chrome は「履歴とタブ」を、オンオフできる同期項目として書いています。オンにすると、開いているタブは「履歴 → 他のデバイスからのタブ」に出ます。ヘルプは すべてのデバイスで同じブックマーク、パスワード、その他の設定を利用する です。Chrome の「デバイスにタブを送信」(Send Tab to Self)は、同期記録へ完全な GURL の spec() を書き込みます。普通の # fragment は URL の残りと一緒に直列化され、先に剥がされることはありません。実装は Chromium の SendTabToSelfEntry です。
システムの共有シートとブックマークを、同じ動作だと思わないでください。iPad の Safari で、fragment 付きの URL をメールへ共有すると、届く文字列が # より前だけになることがあります。アドレスバーを全選択してコピーすると、fragment はたいてい残ります。差が示しているのは次です。「共有を押した」ことで鍵の有無を判断しない。受け手、あるいは別端末のアドレスバーに実際に出た文字で判断する。チャットのプレビュー取得がタイトル層で止まる話は、別の記事です。完全なリンクがブックマークや同期記録に入った時点で、もうプレビュー用ボットの層ではありません。
同期をオンにしても、Google や Apple が暗号文を解けることにはなりません。同期されるのは URL の文字列であり、UsePwd サーバー上の平文ではありません。リスクは「同じアカウントでログインした別端末も、このリンクを開ける」ことであり、「同期サービスが代わりに開いて読んだ」ことではありません。
このページから消去と、タブを閉じる違い
閲覧ページの「このページから消去」は、いまのセッション記録を書き換えます。閉じるボタンだけでは、その手順は走りません。
UsePwd のワンタイムリンクは、鍵を s.html?id={id}#{key} の # の後ろに置きます。作成も閲覧も登録不要ですぐ使えます。現在のタブが Web Crypto で AES-256-GCM により暗号化または復号します。平文の上限は 32 KB です。アップロードする欄は暗号文、有効期限、閲覧回数だけです。有効期限は 1 時間、24 時間、7 日、または「閲覧後のみ破棄」です。閲覧回数は 1–10、既定は 1 です。サーバーが一時保管するのは暗号文だけです。平文は見えず、利用者ごとに取り戻すアカウントもありません。
受け手が閲覧ページを開くと、ページは先に暗号文がまだあるかを尋ねます。この確認は回数を消費しません。「開いて見る」を押したあと、ブラウザは暗号文を取り、# 以降の鍵でこの端末が復号します。復号が成功しても、アドレスバーの fragment は既定のまま残ります。タブを閉じる、またはページを離れると、閲覧ページは平文欄を消します。ただしアドレスは自動では書き換えません。「このページから消去」を押したときだけ、ページは history.replaceState を呼び、現在のアドレスを「パス + クエリ」へ縮め、# とその後ろの鍵を外します。WHATWG は replaceState を、いまのセッション記録を置き換える操作であり、新しい項目を足す操作ではない、と定義しています。説明は History API です。消してからタブを閉じると、「最近閉じたタブ」が戻すのは、もう鍵のないアドレスです。
サーバー上の暗号文がすでに消えたかは、作成時に決めた回数と有効期限だけです。このページの平文を消しても、閲覧が1回増えたり減ったりはしません。回数が残っているあいだ、完全なリンクを持った人は、また「開いて見る」を押せます。回数が尽きたあと、完全なリンクが開くのは破棄済みの画面だけです。それでもセッション履歴、ブックマーク、チャット記録のアドレスは残ります。プレビューが出るチャットに同じリンクを貼ったあと、回数がすでに消費されているとは限らない理由は、プレビューが出るチャットにワンタイムリンクを貼ったあと、閲覧回数がすでに消費されているとは限らない理由です。本記事が補うのは、受け手自身のブラウザ記録であり、チャンネルのカードではありません。
平文欄は消えます。セッション履歴にはまだ # が残ることがあります。復元すると、アドレスバーに鍵がまた見えます。
平文と fragment が、この履歴項目から外れます。復元すると、たいてい ?id= だけが残ります。
開き直すと破棄済みと出ます。この端末とチャットに残ったアドレスは、それだけでは消えません。
いまのブラウザで復元を照合する
目標は「どのブラウザも必ず fragment を同期する」ことの証明ではありません。いま使っているブラウザで、タブを閉じたあと、鍵がまだアドレスバーにあるかを見ることです。
-
01
本番の受け渡しに使わないテスト用の文を用意する
いま使っている API キーやログインパスワードは書かないでください。ワンタイムリンクを開き、たとえば
ClosedTab-20260911を入れ、回数は既定の 1、期限は 24 時間のままにします。ページは登録不要ですぐ使えます。以下はセッション履歴を照合するためだけです。この文字列を同僚への正式な鍵にはしません。 -
02
完全なリンクで閲覧ページを開き、先に「開いて見る」は押さない
生成後は
s.html?id=と#の二段が見えます。いまのブラウザで開きます。ページは「暗号文はまだあります」で止まるはずです。アドレスバーを見て、#以降に鍵があることを確認します。F12 でネットワークパネルを開きます。状態照会のリクエストが見え、そのリクエスト URL に#以降は出ていてはなりません。 -
03
このタブを閉じ、最近閉じたタブから開き直す
タブを閉じます。Windows または Linux では Ctrl+Shift+T、macOS では ⌘+Shift+T です。メニューの「履歴 → 最近閉じたタブ」でも構いません。戻したあとアドレスバーを見ます。よくある結果は、
#と鍵が残っており、ページがまた「暗号文はまだあります」で止まることです。ここで鍵がすでに無いなら、「このページから消去」を押したのか、閉じるだけだったのかを書き留めてください。二つの動作は同じではありません。 -
04
必要なら、ブックマークか、ログイン済みの別端末でも照合する
同じテスト用リンクをブックマークするか、「履歴とタブ」同期がオンの Chrome で「他のデバイスからのタブ」を見ます。別端末に同じアドレスが出たら、照合するのは完全な文字列に
#があるかであり、ページタイトルではありません。Safari で iCloud のタブがオンなら、同じ Apple アカウントでログインした別端末でも同じ照合をします。測るのは自分のアカウントと自分のブラウザです。結果を「どのベンダーも必ず fragment を同期する」とは書かないでください。 -
05
最後に「開いて見る」を押し、「このページから消去」を一度試す
ここでボタンを押し、テスト原文が出ることを確認します。続いて「このページから消去」を押し、アドレスバーに
#が無いことを確認します。タブを閉じてまた復元します。よくある結果は、戻ったアドレスが番号だけになり、鍵がなく、閲覧ページが「鍵がありません」と出すことです。この段は、「タブを閉じた」と「先に消してから閉じた」が同じ状態ではないことを照合するためです。測り終わったらリンクは捨ててください。本番の受け手には回さないでください。
次に新しい鍵を別の人へ渡すなら、本物の鍵で「閉じて開き直す」練習をしないでください。テスト用の文と本番の秘密は分けます。本番の受け渡しは、それでもワンタイムリンクです。環境変数が流出したあとの二巡目のリスクは、クラウドの環境変数が流出したあと、新しい鍵をチャットに送ってはいけない理由です。あちらは「API キーそのものを、検索できる記録へ貼るな」です。本記事は「完全なリンクがブラウザ記録に入ったあと、タブを閉じただけでは足りない」です。
鍵を取り戻したあとでも止められないこと
「最近閉じたタブから鍵を戻せる」を「タブを閉じれば、ほかの人は取れない」と読むと、同じように照合できる境界をいくつか落とします。
ショートカットを押せる人は、このブラウザのプロファイルを使える人です。共有パソコン、ロックしていない席、借りてログアウトしていないブラウザは、「最近閉じたタブ」を二本目の取り出し口にします。最近閉じた一覧を消す、履歴を消す、それでこの近道は止まります。すでにチャット、チケット、スクリーンショットへコピーされた完全な URL は止まりません。ワンタイムリンクが制限するのは、サーバー上の暗号文の寿命と回数です。本機の記録に残ったアドレスを、誰がまだ見られるかではありません。
回数が尽きたあと、履歴からリンクを開き直すと、たいてい破棄済みだけが見えます。それを「履歴はもう安全」とは読めません。管理者、同僚、自分自身は、その文字列からまだ読めます。番号が一度存在したこと、誰かが fragment を鍵に使ったことです。長期保管や複数端末の同期が必要なら、専用のパスワードマネージャーを使ってください。UsePwd にアカウントもパスワード保管庫もなく、利用者ごとに失ったリンクを取り戻すこともできません。立場は概要にあります。
ファイルは三本目の道です。1ファイル 5 GB までのローカルバックアップはファイル暗号化へ。出力は .lock / .enc で、ファイルは既定でアップロードされません。パスフレーズ自体はパスワード生成で 6–128 文字のあいだで作り、パスワード強度チェックで強度を見ます。これらのページも本記事と同じく登録不要ですぐ使えます。「fragment はサーバーログに入らない」を「タブを閉じれば鍵は消える」と読まないでください。ログ、セッション履歴、チャット記録は、同じ層ではありません。
タブを閉じたあとよく聞かれること
下の四つは本記事の境界だけを答えます。作成ページのボタン説明は繰り返しません。
読んだら、閉じて復元を一度照合する
記事が答えるのは「タブを閉じたあと、鍵が最近閉じたタブから戻ってくる理由」です。本番に使わないテスト用リンクを作り、そのタブを一度閉じるなら、ワンタイムリンクを開けばよく、先に登録する必要はありません。