このリンク(http://a//%%30%30
)がGoogle Chromeでクリックされた場合、Chrome=ブレークしてすべてのタブとインスタンスを閉じます。
しかし、場合によってはリンクにカーソルを合わせるだけでタブがクラッシュします。
このリンクにカーソルを合わせるとどうなりますか?つまり、リンクがホバーされたときにChrome=は何をしますか?
ファビオトゥラティが言うように
リンクにカーソルを合わせると、Chromeが左下隅にリンクを表示します。これには、特別にエンコードされた文字の「変換」を含む、いくつかの処理が必要です。
しかし、あなたの投稿とコメントから、あなたはChromeがバックグラウンドでリンクに接続するかどうかについてもっと心配していると思います。 それはあります 、他の最新のブラウザーも同様です( Firefox 、 Opera ) 。Chromeの設定でプリフェッチを無効にするか、 uBlock Origin をインストールしてプライバシー設定を増やすことができます。
ここで正確に何が起こるかについてさらに説明したいと思いました。
基本的に、%30はURLエンコードされた0であり、%00はURLエンコードされたNULL(バイナリで0000 0000として表示される)です。そのため、NULLにデコードされるエンコードされた文字がネストされているURLがある場合、バグが発生します。
ChromeはURLを正規化するときに次のことを行います(ソース: https://code.google.com/p/chromium/issues/detail?id=533361#c1 ):
- 入力文字列 "http://a.com/%%30%30"は " http://a.com/% "にエスケープされず、有効なGURLと見なされます。
- このGURLは最終的にGURLToDatabaseURL()に送信されます。GURLToDatabaseURL()は、ReplaceComponents()を呼び出してユーザー名とパスワードを削除します。
- ReplaceComponents()は、URLを再正規化します。
- パスの正規化は "%00"シーケンスにヒットし、エスケープされません。これは、URLでは無効な0文字であることを確認し、エスケープしたままにしますが、結果のURLを無効としてマークします。
- GURLToDatabaseURL()に戻ると、新しいURLで.spec()が呼び出され、有効であることが期待されます。これは、入力URLが有効であることが保証され、ユーザー名とパスワードを削除しただけだからです。このDCHECKs。
したがって、URLは最初は有効であると見なされますが、特定のプライベートデータを削除すると無効になります。ただし、そのデータが削除された後、その特定のコードを呼び出した関数は有効なURLを予期します。
このURLが無効と見なされる理由の1つは、多くの古いソフトウェアや言語でNULLが文字列の終わりを示すために使用されているためです(これは、基本的には1行に8つのゼロがあり、コンピューターで検出するのが簡単だからです)。