你用 Firefox?說出所有擴充功能的名字。

*除了我們未爬取的 8 個(或在我檢查網站到我爬取之間被刪除的)以及 extensions.json 中遺失的 42 個之外。實際上我們只安裝了 99.94% 的擴充功能。

結果發現 Firefox 擴充功能只有八萬四千個。聽起來數量可行且不大。甚至聽起來不到 50 GB。來全部安裝吧!

附加元件商店有一個公開 API。無需驗證,似乎也沒有速率限制。這應該很容易。

搜尋端點可以接受空查詢。讓我們讀取每一頁:

搜尋 API 只給我 600 頁,這意味著我只能看到三萬個擴充功能,不到一半。

我找到的解決方案是使用不同的排序方式。預設排序是 sort=recommended,users:首先是推薦的擴充功能,然後按使用者數量降序排序。改為僅 sort=created 讓我看到了一些長尾的擴充功能:

我仍然遺失了 30,025 個擴充功能,所以我還加入了評級和熱度。

仍然遺失了 16,785 個。加入了更新...

開始遇到邊際效益遞減。在我等待最後一個列表被爬取(耗時 7 分鐘,因為我的程式碼沒有並行抓取)時,我靈光一閃:使用 exclude_addons。我可以直接抓取第 600 頁並排除其所有附加元件來獲取第 601 頁。

這奏效了!可惜有 URL 長度限制,所以我只能額外抓取 20 頁。

比我預期的少很多,特別是考慮到當我加入下載排序時會發生什麼:

再次閱讀文件,我注意到我也可以按類別過濾。我厭倦了等待 7 分鐘,所以我將並行抓取每一頁。

我用這個方法幾乎抓取了所有擴充功能,讓之前所做的一切看起來很愚蠢。

這比網站上顯示的少 8 個擴充功能。當我在 2025 年 9 月運行此程式時,它找到了比網站上提到的多 21 個擴充功能,所以我認為這足夠了。

為了讓沒有人需要再做一次,我已將此數據集上傳到 Hugging Face。

或者,addons-server 啟用了 CORS,所以點擊這個有趣的按鈕即可獲得您自己的 all_extensions.json:

搜尋 API 支援日期過濾器:created__gte 和 created__lte。API 還會返回符合您搜尋條件的擴充功能的總數。

您可以從包含所有擴充功能的過濾器開始,然後不斷將範圍對半分,直到少於三萬個,然後全部抓取。

我已更新下載器:它更快,浪費的請求更少,並且似乎也準確抓取了所有擴充功能。

如果一秒鐘內創建的擴充功能超過三萬個,這將無效,我無法想像會發生這種情況。

我有一個 Bun 和 all_extensions.json 的副本,所以我要用我無與倫比的腳本能力來折磨你們。

最大的 Firefox 擴充功能是 dmitlichess,大小為 196.3 MB,其中包含 2000 多個音訊檔案。

我第一次運行此分析時,在九月,「Cute doggy - Dog puppies」是第十大擴充功能。我仍然在這裡提及它,因為我當時非常困惑:

最小的擴充功能是 theTabs-saver,大小為 7518 字節,沒有程式碼。

主觀上是 Cute doggy - Dog puppies,但客觀上:

是 Tab Stack for Firefox,由 lolicon(什麼鬼?!)。

FalscheLaden,沒有使用者,請求了 3,695 個權限。作者發表了一篇說明文章。

第二名是 Google Dark Theme,請求了 2,675 個權限但有 1,687 個使用者。

Dr. B 是「垃圾」的王者,發布了 84 個擴充功能,全部都是「vibe coded」。

我怎麼知道的?他們的大多數擴充功能都有一個 README.md 文件描述了他們通過附加元件審核的過程,並提到了 Grok 3。此外,他們沒有一個有圖標或螢幕截圖。

我個人對這個數字如此之低感到震驚。我預計會看到一些開發者擁有數百個!

我審查了數據集中發現的幾個針對加密貨幣錢包的同形異義攻擊的原始碼,但失望地發現它們只是彈出一個要求輸入助記詞的表單並將其發送到他們的伺服器。這是一個擴充功能!!!你可以竊取他們的 coinbase.com 代幣!你可以監控剪貼簿並將他們的地址替換成你的!你可以讓他們的瀏覽器崩潰並聲稱你的真實惡意軟體是修復程式!

為什麼要製作一個假的 MetaMask 擴充功能並刷 1 星評論?

這是他們網絡犯罪競爭對手的所為嗎?他們為自己的擴充功能刷 4 星評論?

無論如何,這些擴充功能顯然是釣魚詐騙。我向 Mozilla 舉報了一些,第二天它們就全部消失了,即使是我懶得舉報的那些。我忘了歸檔它們,所以我想它們活在 May 的虛擬機裡了!

在實現方面,最有趣的一個是「Іron Wаllеt」(I、a 和 e 是西里爾字母)。安裝後三秒鐘,它會從 NocoDB 電子表格的第一條記錄中抓取釣魚頁面的 URL 並打開它:

在您的擴充功能頁面和您自己的頁面上,您會看到一個「Homepage」連結。它已經被 nofollow 了兩年,但這並沒有阻止騙子們嘗試。

在第一次嘗試中,我遇到了 Typo Sniper 和 Tab Fortune Teller,這些是 AI 生成的擴充功能,其作者的 Homepage 連結中包含賭場。

在數據集中,有許多「Code Injector」擴充功能,它們幾乎都相同,並且在其作者的 Homepage 連結中也有隨機網站。

所有這些擴充功能都來自 2025 年。是否有古老的 SEO 指南在流傳?是否有某些邪惡的 AMO 前端仍然能獲得反向連結?我不知道發生了什麼。

所有這些擴充功能都是其作者的唯一上傳,並且它們有自己的網域。其中大多數同時存在於 Chrome 和 Firefox 上,它們的網站看起來相同,並且它們都有一個提及「Innover Online Group Ltd」的服務條款,而這家公司實際上是一個 .png。

因為我對每個 Firefox 擴充功能進行了兩次爬取,所以我可以看到在兩次運行之間有哪些被移除了。Innover Group 的三個擴充功能——Earth View 360°、View Manuals 和 View Recipes,總計 115,000 名使用者——已被 Mozilla 禁用。

Innover Group 為其擴充功能投放 Google 廣告,其中許多廣告僅僅寫著「Continue」。

「Custom Web Search」是 Yahoo,但帶有他們的聯盟代碼。該代碼是 safeplexsearch,它有一個自己的網站,當然提到了 Innover Online Group Ltd,並連結到一個擁有 3,892 名使用者的附加元件,這實際上是 Firefox 獨有的。實際上,「Custom Web Search」是所有這些擴充功能中的 Firefox 獨有功能。他們為什麼還要製作 Chrome 版本,賣給 NSA?

有使用者聲稱 Ezy Speed Test「在安裝後會禁用 Ublock [sic] Origin」,我在其程式碼中沒有找到。

然而,像這樣的公司有很多。我只是關閉了廣告攔截器,然後訪問了 Download.com,在廣告中發現了 Atom Apps 公司,該公司也為 Chrome 和 Firefox 上傳擴充功能,每個擴充功能都有一個新帳戶,僅在 Firefox 版本中包含 Yahoo,名稱以「and Search」或「& Search」結尾,並且其公司名稱是服務條款中的一個 .png。他們總共有 220,000 名每日使用者,遍布 12 個擴充功能,其中沒有一個被禁用。

顯然,我不會在一個新標籤頁中打開其中每一個並經歷這些提示。並非沒有嘗試:

每個擴充功能都有 current_version.file.url 屬性,這是一個直接下載擴充功能的連結。我將它們下載到我的 profile 的 extensions 資料夾中,以 guid 屬性作為基本名稱,並以 .xpi 作為文件擴展名,因為任何其他名稱都不會被安裝。

然後,我刪除了 addonStartup.json.lz4 和 extensions.json 文件。當我重新打開 Firefox 時,每個擴充功能都會被禁用。修改 extensions.json 是足夠常見的操作,您可以讓任何聊天機器人為您完成:

我的第一次嘗試是在我的桌面上的一個 tiny11 核心虛擬機上。

起初,我嘗試使用企業策略而不是用腳本下載所有擴充功能,但這會將所有擴充功能複製到資料夾中。我很快就耗盡了記憶體,分頁文件佔用了分配給虛擬機的剩餘儲存空間。我也預計 Firefox 會立即打開,並且擴充功能會在瀏覽器使用時自行安裝,但這也沒有發生:它只是凍結了。

之後,我嘗試自己下載。

為了確保我正確安裝了擴充功能,我將 extensions 資料夾移到別處,然後將大約一千個擴充功能移回。這奏效了。

有幾個擴充功能將所有文字更改為特定字串。bruh-ifier 輸給了 Se ni važn。Goku 在背景中。

我的右鍵選單太長了,以至於我必須橫向顯示:

我安裝了許多保護擴充功能。其中一個封鎖了到 .zip 和 .mov 網域的流量,大概是因為它們是文件擴展名。這是 .cab 的抹除!然後,我意識到很可能有很多人在查看我的瀏覽歷史記錄,所以我去給他們發了個訊息。

那個「⚠️ SCAM WARNING!」彈出視窗來自 Anti-Phishing Alert。正如您可能已經推斷出的,它似乎只存在於其 Homepage 連結。它是如何工作的?

Vasavi Fraudulent Detector 也有一個網站安全的彈出視窗:

只有第一次嘗試中的附加元件被實際加載,因為我還不知道需要刪除 addonStartup.json.lz4。我滾動了附加元件頁面,然後打開了 DevTools 來驗證是否是完整的 65,335 個,當時 Firefox 凍結了,我無法重新打開它。

之後,我在我的 Mac 上創建了一個新的(非管理員)用戶,以便在功能更強大的設備上再次嘗試。

每次我瞥見我的腳本一次下載一個擴充功能長達六個小時時,我都會認出一些名字。糟糕,我現在是 AMO 的主題專家了!在最後 4000 個擴充功能時,並行處理反而讓速度變慢,這在我的 Windows VM 上沒有發生。

完成後,我發現我的硬體無法同時運行 65,335 個擴充功能,真可惜。視窗確實會在一段我沒有測量的時間後打開,但視窗從未開始響應。我沒有膽量讓我的筆記本電腦運行一整夜。

Firefox 確實產生了超過 400 GB 的磁碟寫入。因為我忘了交換空間的存在,我檢查了 profile 來尋找罪魁禍首,這時我才了解到需要刪除 addonStartup.json.lz4 並修改 extensions.json。extensions.json 文件大小為 144 MB。相比之下,我 PC 的 extensions.json 文件大小為 336 KB。

我的解決方案:一次添加 1000 個擴充功能,直到 Firefox 打開所需的時間過長。我達到了 6000 個。

3000 個擴充功能是我最後能夠加載網頁的點。

在 4000 個或更多擴充功能之後,體驗基本上是相同的。這是一個我的影片(癲癇警告):

5000 個擴充功能與 4000 個相同,但每個網站都被一個我知道以 S 開頭、以 Blocker 結尾且圖標包含 CJK 字元的擴充功能阻止了。在 6000 個擴充功能時,唯一能加載的頁面是 about:addons。

我的桌上型電腦有 16 GB 的 RAM,我的筆記型電腦有 24 GB 的統一記憶體。您可能會注意到 49.3 GB 是兩者的兩倍多。

您即將看到的是在 May 的虛擬機中錄製的。請勿在您的主要 profile 上嘗試此操作。

我的下載腳本開始時是並行的,然後在速度變慢時切換為串行。總共下載花了約 1 小時 43 分鐘。

我全程都在通話,我們在日誌中發現了很多奇怪的擴充功能。什麼樣的怪胎會使用「KiwiFarms Math Renderer」?他們是在起草 soytivity 的理論嗎?

打開 Mullvad VPN 並路由到特拉維夫似乎加快了進程。這不是因為 Big Yahu,而是因為 May 重啟了腳本,所以她重複了幾次。我不知道這是否是 Bun 的錯誤,我也不在乎。May 開玩笑說有一個「第二版」,我不敢想。

Defender 將一個擴充功能 HackTools 標記為惡意軟體。May 之後排除了該資料夾,所以它可能不是唯一的。

Firefox 花了很長時間重新創建 extensions.json,並且它一直在增長。大約 39 分鐘後,Firefox 顯示一個骨架(因此「它尚未渲染第二幀」),它的大小達到了 189 MB:創紀錄!May 殺死了 Firefox 並運行了 enable.js。

我做了一些研究,找出為什麼花了這麼長時間。13 年前,extensions.json 曾經是 extensions.sqlite。如今,extensions.json 在每次寫入時都被序列化並完全重寫,寫入被抑制到 20 毫秒,這對於 15 個擴充功能來說還可以,但對於 84,194 個則不行。

終於,我們看到了瀏覽器。入門標籤頁緩慢出現,從未加載。

May 重新打開它,洗了個澡,然後回來看到這個:

它穩定下來了。您可以(勉強)運行帶有所有八萬四千個擴充功能的 Firefox。

嗯,我們很確定它有八萬四千個擴充功能。至少它有 Tab Counter,並且擴充功能面板中的滾動條非常巨大。

她加載了兩個擴充功能的配置頁面。選項 iframe 從未加載。

我意識到我們需要在 Firefox 發送另外八萬四千個請求之前禁用自動更新。這個過程花了一段時間才加載。

列表加載了,但沒有圖標,並且停止響應,六小時後才完全加載。

我們錄製了整個過程;記憶體使用量在 27 到 37 GiB 之間波動。

我們確實擁有了幾乎所有的擴充功能,包括 May 自己的 mt-rpc。

我仍然不知道 about:addons 為什麼花了 6 小時才加載。

我測試了我第一個理論,即擴充功能圖標沒有惰性加載——諷刺的是,這又發送了另外八萬四千個請求——通過對 Firefox 進行一行補丁,並在我的 Mac 上安裝了三千個(已禁用)擴充功能。為了編譯 Firefox,我不得不刪除 Attempt 3 中的擴充功能以釋放儲存空間。

我不認為這減少了 Firefox 凍結的時間。公平地說,我測試的擴充功能數量是 Attempt 11 的 28 倍,所以問題可能只在那個規模上出現。

哇,這真是太多擴充功能了。但你無法確定。

我讓 May 打開 DevTools 並檢查 $$("#addons-tbody tr").length,以便我們能夠確定我們認為正在運行的 84,205 個擴充功能。

更仔細地閱讀 about:support,我意識到我的擔憂是正確的,但原因與我預期的不同:84,205 個包括了內建附加元件,如 Web Compatibility Interventions。排除這些,我們總共安裝了 84,194 個擴充功能。

先前,我曾寫過 DevTools 沒有加載任何擴充功能,因為它是一個 about: 頁面,但後來我安裝了 webhint 並前往 about:support,果然它就在那裡,所以我不知道是什麼原因導致的。

我們想看看有多少新分頁選項可供選擇。

我們在途中啟用了崩潰報告。

哪個擴充功能獲勝?答案是沒有一個。新分頁頁面從未加載,無論我們選擇哪個擴充功能,除了 Firefox Home,它立即打開。

buyPal(1 個使用者)擴充功能的一個頁面在我們沒有任何操作的情況下打開並替換了當時打開的其他標籤頁。它加載了:唯一一個非 about: 頁面。

這是內容腳本可以運行的第一個頁面。

就像在 Attempt 9 中一樣,肯定有多個擴充功能阻止了所有網站。但它們並不重要,因為我們將標籤頁打開了 24 小時,它從未加載。

它加載了,然後她點擊了 Environment Data,瀏覽器崩潰了。

這是 all_extensions.json 中存在但 extensions.json 中不存在的附加元件。刪除線 = 從 AMO 刪除。↩

本文發表於 2026 年 4 月,但第一版,包括爬取腳本,寫於 2025 年 9 月。我重新運行了最終腳本並讓 Claude 更新了數字。它通過我的中間文件向後工作,而不是重新爬取(由於數據當時已更改,重新爬取將不準確),我認為數字足夠準確。我自己更新了遺失的擴充功能計數,因為它假設最終計數是 84,000(正如我寫的那樣),而不是 84,243。↩ ↩ 2

預示是一種文學手法,作家利用它來向讀者暗示或提示故事中即將發生或出現在後面的內容。↩