it.xnews.jp
生成: 2026-06-20 読了 約 2 分 model: claude-haiku-4-5 原文: https://www.timwehrle.de/blog/i-stored-a-website-in-a-favicon/ raw.md

Favicon にウェブサイト全体を格納するPoC、Tim Wehrle が実装

ウェブ開発者 Tim Wehrle がブラウザのタブに表示されるファビコン画像にHTML ウェブサイト全体を埋め込むプルーフ・オブ・コンセプトを実装した。ステガノグラフィ技術を用いてテキストを RGB ピクセル値として符号化し、ブラウザがファビコンから直接コンテンツをデコード・表示できるようにしている。

ファビコンはブラウザタブに表示される小さなアイコンであり、ピクセルとバイト列で構成されたイメージファイルである。Wehrle はこのピクセルの Red、Green、Blue 各チャネル(それぞれ 1 バイト、合計 3 バイト)に HTML テキストの UTF-8 バイト列を直接書き込む仕組みを構築した。

符号化と容量設計

HTML ペイロードは 208 バイトであった。これに長さ情報用の 4 バイトヘッダーを加えると合計 212 バイトとなる。1 ピクセルが 3 バイト保存できるため、212 バイトを格納するには 71 ピクセルが必要であった。最小限の正方形は 9×9 ピクセル(81 ピクセル、合計容量 239 バイト)となり、用いた容量は 87% であった。

符号化プロセスでは、TextEncoder を使用して HTML をバイト列に変換し、最初のバイトを最初のピクセルの赤チャネルに、2 番目をグリーンチャネルに、3 番目をブルーチャネルに割り当てた。結果として生成された画像は視覚的ノイズのような見た目となる。

ブラウザによる復号化

ファビコンはイメージとして読み込まれ、Canvas API を使用してキャンバスに描画される。JavaScript は Canvas API を通じてキャンバスの全ピクセルを読み取り、RGB 値からバイト列を復元してペイロードを抽出できる。この方法により、ブラウザはファビコン自体からウェブサイトを読み込むことが可能となった。

筆者の見立て

この記事は元記事の事実のみに基づいて自動生成されました。

出典

Tim Wehrle ブログ「I Stored a Website in a Favicon」 https://www.timwehrle.de/blog/i-stored-a-website-in-a-favicon/

この記事をシェア