3 ポイント 投稿者 GN⁺ 2023-09-07 | 1件のコメント | WhatsAppで共有
  • ウェブサイトのすべてのファイルをZIPで圧縮してからBase64でエンコードし、ドメインの後ろに付けると、そのアドレス自体が完全なウェブサイトになるホスティング方式
  • 別途ファイルをアップロードしたりサーバーに保存したりせず、アドレスを共有するだけでサイトを渡せる構造
  • コマンドライン1行でZIP圧縮・Base64エンコード・URL生成を処理し、コマンドラインがない場合はZIPファイルをドラッグする方法にも対応
  • サーバーはコンテンツをRAMに15分間だけ保持し、その後破棄。同じリンクを再度開いた場合にのみ再処理される
  • Lwanウェブサーバープロジェクトの一部としてオープンソースであり、QRコードによる紙への印刷・スキャンまで可能

smolsiteの概念

  • サイト全体がURLの中に含まれ、アドレスを共有するとサイト自体も一緒に渡される
  • 2つのファイル(index.html、mylogo.png)で構成された例のように、複数のファイルをまとめて1つのアドレスに変換できる

smolsiteの作成方法

  • すべてのファイルをZIPファイルに圧縮し、Base64でエンコードしたうえで https://smolsite.zip/ の後ろに続ける

FAQ

  • コマンドラインがない場合

    • 下部の紫色のバーにZIPファイルをドラッグすると共有できる
  • 紙でホスティングできるか

    • 可能で、QRコードをクリックすると印刷・スキャン可能なバージョンを確認できる
  • オープンソースか

  • サーバーでのZIP処理方式

    • コンテンツはサーバーで処理され、RAMに15分間保持された後、削除される
    • ただし、誰かが同じリンクを再度開くと再処理される
  • ZIP爆弾(ZIP bomb)への対応

    • デフレートされたデータは変更なしでそのままブラウザへ送信され、再帰的な展開がないため、ある程度防御できる
  • コンテンツのダウンロード・削除は可能か

    • smolsiteを通じた正確なURL共有の遮断は可能な限り試みるが、コンテンツがURLの中にあるため完全な削除はできない
      • リンクを持っている人は、smolsiteなしでも内容を抽出できる

1件のコメント

 
GN⁺ 2023-09-07
Hacker News のコメント
  • すごい
    https://smolsite.zip/UEsDBBQAAgAIAFtLJ1daaE7RlwIAAN4EAAAKAAA...
    • すごい。ということは、TinyURL にウェブサイトをホストさせることもできる
      https://tinyurl.com/dmk9e4m2
    • このリンクで QR コードを作ってみたけど、本当に大したことはなかった。QR コード内でウェブサイトをホストできるなんてすごい
  • 知らない人のために補足すると、data URI でも同じことができる
    data:text/html,My%20small%20website
    Look,%20it's%20real!
    望むなら data URI ジェネレーターで base64 エンコードも可能。smolsite の利点は、zip なら data URI より少し多く詰め込めることと、一部の JavaScript API は smolsite URL では動作するが data URI では動作しないこと
    • この手法で簡単なメモ帳を作れる
      data:text/html,
      ブックマークツールバーに入れて使っている
    • 誰かが、ひとつの smolsite にそのドメインへサービスワーカーをインストールさせ、他のすべての smolsite の分析データを自分のサーバーへ送るものを作る前に、先に書いておく
    • Base64 + gzip を使って、1つのツイートにだいたい 5KB のテキストを保存している: https://sonnet.io/projects#:~:text=Laconic!%20(a%20Twitter%2...
    • 良くも悪くも、Web ブラウザと URL 短縮サービスは data URL を開くことやリダイレクトをブロックするので、主にブラウザのブックマーク用途でしか役に立たない
      [1] https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_...
  • URL に変なものを入れるという話題なら、小数で表した犬もある: https://geonnave.github.io/primg/#17976931348623159077293051...
    • これは驚き。画像を小数の二進表現で表そうと考えたというだけでもすごい
  • 私の返信も URL の中にある
    https://wgx.github.io/anypage/?eyJoMSI6IkhlbGxvIEhOISIsImgyI...
  • いいね。URL 内にテキストを LZMA で圧縮し、base64 でエンコードして保存する pastebin の nopaste を思い出す
    [0] https://nopaste.boris.sh/
  • この方式は展開のために内容をサーバーへ送る。もう少し複雑にするなら、zip をアンカー部分に入れて、レスポンス側はクライアント側でそこから展開するコードを提供するようにもできる

ただしアンカー部分はサーバーに送信されないため、サーバーが望んでも、それを通じて送られる有害コンテンツを検査できなくなる

  • 同じことを考えた。静的コンテンツサーバーがすべてのトラフィックを同じWebページに送るルーティングのglobを使えば、アンカーなしでも可能。こうするとホスティングが本当に単純になる
  • こういうものこそ本当にクールで、他の組織が製品を押し出すマーケティング手段ではなく、Show HNは本来こういう感じであるべきだと思う
    • こういう種類のものもいいけれど、Y Combinatorはスタートアップ・インキュベーターでもある点も考慮すべき。人々が自分の製品を見せることは、ある程度までは奨励されてしかるべきだと思う
    • 広告だとは見ていない。Hacker Newsには、ハッカーたちが何を作っているのかを見に来る人が多く、自分もそのために来ている
      これまで見たShow HNの投稿はどれも興味深かったし、自分のプロジェクトも始めて、ここで見せられるように磨き上げようという動機になった。誰かが自分の作品を投稿してくれて、そこで話せると本当にうれしい
    • もっと斬新なShow HNが企業っぽい投稿に押しのけられているという印象がある?
    • だから面白いShow HNはアップボートされる
  • 以前、Borgesのバベルの図書館をこんなふうに実装するアイデアを思いついたことがある。すべてのテキストをURLに入れ、より精巧なエンコーディングで英単語を最適化し、その上で自分の名前やテキスト片などを探せる検索システムを付けるという方式
    もちろん最終的にはURL長の制限にぶつかるだろうが、キュレーターがURLの束を組み合わせて、より大きなテキストを作れるレイヤーを載せることもできる。LLMの魔法を少し入れて束を生成させることもできるし、そうすれば、すでに書かれたすべての本だけでなく、書かれ得るすべての本を含む図書館になる
    もちろん冗談。メモ帳にも、存在するすべての本はすでに入っていて、ただ自分で入力すればいいだけだ、という話に近いのは分かっている
  • 以前投稿された似たような取り組み
    https://news.ycombinator.com/item?id=34312546
    https://news.ycombinator.com/item?id=2464213
    • 最初のリンクにある、YahooがURLに巨大なbase64エンコード済みJSONオブジェクトを入れていたというコメントを見て、昔の職場でやらかしたひどいことを思い出した
      高額なイベントカレンダーモジュールの費用をWebサイトベンダーに払わずに済ませるため、data-events属性にbase64エンコードした簡単なJSONイベントスキーマを入れてカレンダーを作る公開ページをコーディングした。職員は非公開ページで公開ページの既存イベントデータを取得してカレンダービルダーに事前入力し、編集した後、新しいコード片を取り出して公開ページに貼り付ける、という使い方をしていた
      基本的にはうまく動いたが、結局カレンダーアドオンの費用を普通に払った気がする
    • HNのリンクは今見つけられないが、数年前に投稿したTwitter CDNプロジェクトがここにある。base64+gzip data URI方式
      https://sonnet.io/projects#:~:text=Laconic!%20(a%20Twitter%2...
  • 笑えるけれど実用的な使い道もあるかもしれない。それでもハッカーは注意すべき
    • 予想外の相手に悪意あるペイロードを送る素晴らしい方法がすぐに思い浮かんだ。優れたWAFなら怪しいとしてブロックするだろうが、いくつかのトリックで回避できるかもしれない