WebAssemblyをAnubisに組み込むのに1年かかった理由

It took a year to ship WebAssembly in Anubis

Anubisは、WebサイトをAIボットやスクレイパーから保護するためのプロキシです。この記事では、AnubisにWebAssembly(Wasm)サポートを追加するまでの1年間の道のりを、作者自身の視点で振り返ります。Wasmを選択した理由、設計上の課題、そしてAnubisのコアであるリバースプロキシとの統合における技術的な詳細が語られます。最終的に、WasmはAnubisのチャレンジ解決プロセスを高速化し、より柔軟な保護を可能にしました。

WebAssemblyをAnubisに統合する作業は、単なる機能追加ではなく、プロキシのアーキテクチャそのものを再考することを意味していました。
  1. vintagedave

    > 私の経験では、このまさに同じ状況の組み合わせを抱える人々は、たまたま邪魔になるオープンソースプログラムの作者に対して示す親切さのレベルに大きなばらつきがある傾向があります。

    これ、大好きです。HNではOSSメンテナがどう扱われるかについて過去に議論がありましたが、これはとても皮肉な一文です。この問題に対するトーン/態度が本当に好きです。

  2. doctor_radium

    私はここにあるFirefoxのすべてのコピーでWebAssemblyを無効にしています...なぜなら、私はWebAssemblyが意図された用途、つまりオンラインゲーム、ビデオ/オーディオ編集、エミュレーションなどをやらないからです。[1] また、自分の知らないうちにバックグラウンドで何かが動くのが嫌いだからです。

    だからこれは面白くなりそうです。

    OPへの私の(小さな声での)お願い:多くのサイトがJavaScriptについてまだやっているように、WebAssemblyが無効になっているときに「このキャプチャは続行するためにWebAssemblyを必要とします」というメッセージをコードに追加してください。そして、ついでに、WebAssemblyエンジンをまったく提供していない小さなプラットフォーム/ブラウザ向けにも。

    [1] https://webassembly.org/docs/use-cases/

  3. andai

    余談ですが、Anubisで保護されているすべてのページは静的HTMLです。しかし、ボットトラフィックは動的なページにのみ有害ですよね?

  4. dspillett

    > また、「ねえClaude、CUDA Anubisソルバーを雑に生成して」というルートは根本的に死にかけているということでもあります。

    以前のチャレンジは、WASMが利用できない状況(JSが利用可能なら利用できるという前提で動いているのでなければ)や、フォールバックとしてまだ利用可能だと思います。TFAは「スマート」TVに言及していますが、WASMを知らないほど古いブラウザを搭載したTVもたくさんあるはずです。正直なところ、これらは私にとって優先事項ではありませんが、このプロジェクトにとっては明らかに優先事項です(彼らが、いや、一般的にTVが、この記事で具体的に言及されているからです)。

    もしそうなら、スクレイパーが新しいメモリハードアルゴリズムを実行しようとする代わりに、フォールバックのPOWオプションを強制するのを止めるものは何でしょうか?

  5. kccqzy

    Xe氏が後方互換性にこれほど時間を費やしたことに敬意を表します。特にChrome 66をターゲットにしたという細かい点は素晴らしいです。

    私は2014年のMacでYosemiteを動かしており、自分のフロントエンドコードの後方互換性テスト(趣味で!)に時々使っています。しかし、互換性を確保する最善の方法は、時代に合ったツールチェーンか、ClojureScriptのように変化のペースが遅いツールチェーンを使うことだと思います。

  6. Aachen

    自分のブラウザが互換性があるか試せる場所はありますか?仕事をしようとしたときに、何百万ものウェブサイトがそれをデプロイしていることに気づくより、今のうちに確認する方が簡単です。

    https://wasm-feature-detect.surma.technology では、これらの機能のうち3つが欠けていると表示されますが、Anubisがそれらのいずれかを必要として、純粋なJSソリューションに戻されるかどうかはわかりません。

    それは明らかに悪いことのようです。なぜなら

    > このフローで出荷されるWebAssemblyは信じられないほど高性能です。これは、難易度を[上方に]調整する必要があるかもしれないことを意味します[ボットがwasmをサポートしているときに簡単に解けないようにするため、と私は思います]

    と組み合わせると

    > wasm2jsフローには現在プログレスバーを更新する方法がありません[残り時間がわからない]

    (0ハッシュ/秒で止まっているページにイライラして諦めたのはこれが初めてではないでしょう)

  7. Georgelemental

    Rustの`wasm32v1-none`ターゲットを使用すると、追加のターゲット機能なしでベースラインのWASMを取得できます。(ただし、`#[no_std]`に制限されます。)https://doc.rust-lang.org/rustc/platform-support/wasm32v1-no...

  8. 0x696C6961

    POWを事前に実行できたらクールだと思います。そうすれば、作業中に待たされることがありません。ブラウザが後で使えるクレジット/トークンのようなものがあると良いですね。

この日のほかの記事

2026-09-06